科学计数法
**题目描述:**
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,
其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分
只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
#include <stdio.h>
int main()
{
char str[10000];
char ds[10000];
int i,cnt = 0,num = 0,sum = 0;;
gets(str);
for(i = 1;str[i]!='E';i++)
{
if(str[i]!='.')
{
ds[cnt++] = str[i];
if(str[i] == 0)
{
sum++;
}
}
}
ds[cnt] = '\0';
char zs;
i++;
zs = str[i];
int zsnum = 0;
for(i++;str[i]!='\0';i++)
{
zsnum = zsnum*10 + str[i]-'0';
}
if(zsnum==0)
{
for(i = 0;i<cnt;i++)
{
if(i == 1)
{
printf(".");
}
printf("0");
}
}
else if(sum == cnt)
{
if(i == 1)
{
printf(".");
}
printf("0");
}
else if(zs == '-')
{
if(str[0]=='-')
{
printf("-");
}
for(i = 0;i<zsnum;i++)
{
if(i == 1)
{
printf(".");
}
printf("0");
}
fputs(ds,stdout);
}
else if(zs == '+')
{
if(str[0] == '-')
{
printf("-");
}
if(zsnum < cnt-1)
{
for(i = zsnum+1;i<cnt;i++)
{
ds[i+1] = ds[i];
}
ds[zsnum+1] = '.';
ds[cnt+1] = '\0';
fputs(ds,stdout);
}
else
{
for(i = cnt;i<=zsnum;i++)
{
ds[i] = '0';
}
ds[i] = '\0';
fputs(ds,stdout);
}
}
return 0;
}