问题描述
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][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
C语言代码
#include<stdio.h>
#include<string.h>
//存放输入的小数部分
char str[100000];
int main(){
int n, num = 0;
while(1){ //循环输入小数部分直到输入'E'为止
scanf("%c",&str[num]);
if(str[num]=='E') break;
else num++;
}
str[num] = '\0'; //将存放在最后的'E'用'\0'替换
scanf("%d", &n); //输入指数部分
if(str[0]=='-') printf("-"); //如果小数部分为负数,输出'-',否则不输出
//若为负指数
if(n < 0){
for(int i = 1; i < num; i++){ //循环遍历小数部分
if(i==2) continue; //跳过str[2] = '.'的输出
if(i==1){ //遍历到整数部分时
for( int j = 0; j < -n; j++){ //循环输出n个0,及0.
if(j==0) printf("0.");
else printf("0");
}
}
printf("%c",str[i]);
}
}
//若为正指数
else{
for(int i = 1; i < num; i++){ //循环遍历小数部分
if(i==2) continue;
if(!(i==1&&str[i]=='0')) //若整数部分为0则不输出,反之输出
printf("%c",str[i]);
if(num-1 > 2+n){ //若小数部分足够末尾不需要输出0时
if(i==2+n) printf("."); //第2个位置往后的n位输出'.'
}else{ //小数部分不足,需要末尾输出n-num+3个0时
if(i==num-1){
for(int j = 0; j < n-num+3; j++)
printf("0");
}
}
}
}
return 0;
}