科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。
也就是说格式为类似+n.xxxxxx+xxx,n为1~9的整数
输入格式:
一个以科学计数法表示的实数 A,该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999
输出格式:
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。
Sample Input
+1.23400E-03
Sample Output
0.00123400
代码
#include<stdio.h>
#include<string.h>
int main(){
char s[10000];
int k;
char a=getchar();
if(a=='-') printf("-"); //如果是负号先输出
int n;
scanf("%d",&n); //首位数字n
getchar(); //小数点扔掉
for(k=0;k<10000;k++){
scanf("%c",&s[k]);
if(s[k]=='E') break; //遇到E就可以停了,这个时候k多累加了一次
}
k--;
char e1;
int e;
scanf("%c%d",&e1,&e); //指数的正负号和指数
if(e==0){
printf("%d.",n);
for(int i=0;i<=k;i++) printf("%c",s[i]); //好像没有测试用例用到这个
}
if(e1 =='+'){
if(k+1>e){ //输出含小数点的数字
printf("%d",n);
for(int i=0;i<e;i++) printf("%c",s[i]);
printf(".");
for(int i=e;i<=k;i++) printf("%c",s[i]);
}
if(k+1<=e){ //输出没有小数点的数字
printf("%d",n);
for(int i=0;i<=k;i++) printf("%c",s[i]);
for(int i=0;i<e-k-1;i++) printf("0");
}
}
if(e1 =='-'){
printf("0.");
for(int i=0;i<e-1;i++) printf("0");
printf("%d",n);
for(int i=0;i<=k;i++) printf("%c",s[i]);
}
return 0;
}
注意
写的太麻烦了,去研究算法笔记上的代码然后改进下