PAT-B 1024 科學計數法【模擬+字串】

Enjoy_process發表於2019-02-22

                                              PAT-B 1024 科學計數法

                  https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168 

 

 

題目

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 [+-][1-9].[0-9]+E[+-][0-9]+,即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 A,請編寫程式按普通數字表示法輸出 A,並保證所有有效位都被保留。

輸入

每個輸入包含 1 個測試用例,即一個以科學計數法表示的實數 A。該數字的儲存長度不超過 9999 位元組,且其指數的絕對值不超過 9999。

輸出

對每個測試用例,在一行中按普通數字表示法輸出 A,並保證所有有效位都被保留,包括末尾的 0。

樣例輸入

+1.23400E-03

樣例輸出

0.00123400

分析

模擬+字串,註釋很清楚,具體看程式。

C++程式

#include<iostream>

using namespace std;

const int N=10005;

int main()
{
	char s1,s2;//s1數符,s2階符 
	char M[N],E[N];//M[]尾數,E[]指數
	s1=getchar();//讀入數符 
	int k1=0,k2=0;//分別表示M[]、E[]的元素個數
	int pos=-1;//表示小數點的位置
	char ch;
	while((ch=getchar())!='E')
	{
		if(ch=='.')
		{
			pos=k1;//小數點在第k1個數字後面
			continue; 
		}
		M[k1++]=ch;
	}
	s2=getchar();//讀入階符
	while((ch=getchar())!='\n')
	  E[k2++]=ch;
	//計算指數的值 
	int t=0;
	for(int i=0;i<k2;i++)
	  t=t*10+E[i]-'0'; 
	if(s1=='-') putchar(s1);//當數符為負的時候才輸出
	int sum=pos+(s2=='+'?t:-t);//要輸出的整數部分的位數 
	if(sum<=0)//位數為負,表明要前補零 
	{
		int temp=-sum;
		//位數不夠,補零 
		printf("0.");
		for(int i=0;i<temp;i++)
		  putchar('0');
		for(int i=0;i<k1;i++)
		  putchar(M[i]);
	}
	else if(0<sum&&sum<=k1)
	{
		for(int i=0;i<k1;i++)
		{
			if(i==sum) putchar('.');//小數點在第sum個數的後面 
			putchar(M[i]);
		}
	} 
	else//大於k1,表明要後補零 
	{
		for(int i=0;i<k1;i++)
		  putchar(M[i]);
		//補零  
		for(int i=k1;i<sum;i++)
		  putchar('0');
	}
	putchar('\n');
	return 0;
} 

 

相關文章