科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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 <cstdio>
#include <cstring>
int main()
{
char str[10010]; //定义一个输入的字符数组
gets(str);
int len=strlen(str); //获得其长度
int i;
if(str[0]=='-') printf("-"); //如果第一位是-,就打印出来
int postion=0; //第一步: 先找到E的位置
while(str[postion]!='E')
{
postion++; //记录E所处的位置
}
int exp=0; // 第二步:存放指数
for(i=postion+2;i<len;i++)
{
exp = exp*10 + (str[i]-'0');
}
if(exp==0) //第三步:对指数进行判定,如果=0
{
for(i=0;i<postion;i++)
{
printf("%c",str[i]); //直接输入字符串
}
}
if(str[postion+1]=='-') //第四步:如果指数是负数
{
printf("0."); //先打印0.
for(i=0;i<exp-1;i++) //再打印指数所对应的0 的个数
{
printf("0");
}
printf("%c",str[1]); //再打印字符数组
for(i=3;i<postion;i++) //最后输入除了小数点意外的数字
{
printf("%c",str[i]);
}
}
else //第五步: 如果指数是正数
{
for(i=1;i<postion;i++)
{
if(str[i]=='.') continue; //先遍历E之前的数字
printf("%c",str[i]);
if(i==exp+2 && postion-3 !=exp) //再打印改变后的.
{
printf(".");
}
}
for(i=0;i<exp-(postion-3);i++) //如果指数exp比较大,指出多余的0
{
printf("0");
}
}
return 0;
}
结果: