1024 科学计数法 (20 分)
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][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>
int main()
{
char a[10000];
int b[100000];
int c[5];
scanf("%s",a);
int i=0;
int j=0;
int t=0;
int t1=0;
int flag=0;
int sum=0;
if(a[0]=='-')//判断符号位;
{
printf("-");
}
for(i=1;a[i]!='E';i++) //把所有的数都存到数组;
{
if(a[i]!='.')
{
b[j]=a[i]-'0';
j++;
}
}
t=j; //用t记录数组的长度;
for(i=1;a[i]!='\0';i++)
{
if(a[i]=='+')
{
for(j=i+1;a[j]!='\0';j++) //记录小数点要向右移动的位数;
{
sum=sum*10+(a[j]-'0');
}
printf("%d",b[0]);
for(j=1;j<=sum;j++) //如果向右移动的位数大于等于数组的位数则多的位数要输出0,否则在出了循环后要继续输出;
{
if(j<t)
{
printf("%d",b[j]);
}
else
{flag=1;
printf("0");
}
}
if(flag==0&&j!=t)
{
printf(".");
for(;j<t;j++)
{
printf("%d",b[j]);
}
}
break;
}
if(a[i]=='-')
{
for(j=i+1;a[j]!='\0';j++)
{
sum=sum*10+(a[j]-'0');
}
printf("0.");
for(j=0;j<sum-1;j++)
{
printf("0");
}
for(j=0;j<t;j++)
{
printf("%d",b[j]);
}
break;
}
}
return 0;
}