题目
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。
输入格式:
每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。
输出格式:
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2:
AC代码
- 要求有效位被保留。而至于无效的0不去掉也能通过,如下:
输入
输出
- 以下代码没有去掉无效位,用了几个字符串处理函数,也可以自己写语句实现
#include<stdio.h>
#include<string.h>
int main(){
char number[20000],*p_int,*p_flo,*p_pow;
gets(number);
p_int=strtok(number,"."); //字符型整数部分
p_flo=strtok(NULL,"E"); //字符型小数部分
p_pow=strtok(NULL,"E"); //字符型指数部分
int interger,pow;
interger=atoi(p_int); //获得int型整数部分
pow=atoi(p_pow); //获得int型指数部分
if(pow>=0){ //指数大于0
printf("%d",interger); //输出整数部分
int i;
for(i=0;*p_flo;i++,p_flo++){ //输出小数部分
if(i==pow)printf("."); //相应位置加小数点
printf("%c",*p_flo);
}
while(i<pow){ //补零
printf("0");
i++;
}
}
else{ //指数小于零
if(interger<0){ //整数部分小于零
printf("-"); //输出负号
interger=-interger;
}
pow=-pow;
for(int i=0;i<pow;i++){ //小数点前移,补零
printf("0");
if(i==0)printf(".");
}
printf("%d%s",interger,p_flo);
}
return 0;
}