科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
输入格式:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。
输出格式:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
输入样例1:+1.23400E-03输出样例1:
0.00123400输入样例2:
-1.2E+10输出样例2:
-12000000000 代码:#include<stdio.h> #include<string.h> int main(){ char ch[10000]; int cnt=0;//记录除小数点E之前字符的个数 while((ch[cnt]=getchar())!='E'){ if(ch[cnt]=='.') continue; cnt++; } ch[cnt]='\0'; int a; scanf("%d",&a);//获取指数 if(ch[0]=='-') printf("-");//ch[0]存放数字的正负号,如果是"-",则输出 if(a<0){ //小数点左移 a=-a; //左移次数 printf("0.");//只要左移,必定有"0." int i; for(i=1;i<a;i++) //左移a为就是前补a个0(0.算一个0) printf("0"); for(i=1;i<cnt;i++){ printf("%c",ch[i]); } } else{ //小数点右移 int len=strlen(ch); int k=1; int i; while(ch[k]=='0'){ //寻找一个不为0的字符,在ch数组的位置 k++; } if(a<len-2){ //右位数小于小数点后面的数字个数 for(i=k;i<=a+2-k;i++) printf("%c",ch[i]); printf("."); for(k=i;k<=cnt-1;k++) printf("%c",ch[k]); } else{ //右移位数大于小数点后面的数字个数 for(i=k;i<len;i++) printf("%c",ch[i]); for(i=0;i<=a-len+1;i++) //后补a-(len-2) 个0 printf("0"); } } return 0; }