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
测试点2 3考虑的是 指数刚好可以将其转化为一个整数时,程序末尾还输出了 . 的情况
例如 +1.23E+2 正确的输出应该是 123,而有的程序可能会输出 123.
测试点四考虑的是所给的指数并不能将其转化为一个整数的情况
代码如下:
#include<stdio.h>
int main()
{
char a[15000];
char t;
int i = 0;
int count = 0;
while ((t = getchar()) != '\n')
{
a[i] = t;
i++;
}
if (a[0] == '-')
{
printf("-");
}
for (count = 0;; count++)
{
if (a[count] == 'E')
{
break;
}
}
count++;
int total = 0;
int flag = 0;
if (a[count] == '-')
{
count++;
while (count<i)
{
total = total * 10 + (a[count] - 48);
count++;
}
printf("0.");
total--;
while (total > 0)
{
printf("0");
total--;
}
for (count = 1; a[count] != 'E'; count++)
{
if (a[count] != '.')
{
printf("%c", a[count]);
}
}
}
else if (a[count] == '+')
{
count++;
while (count < i)
{
total = total * 10 + (a[count] - 48);
count++;
}
if(total == 0)
{
for (count = 1; a[count] != 'E'; count++)
{
printf("%c", a[count]);
}
}
else
{
total++;
for (count = 1; a[count] != 'E'; count++)
{
if (a[count] != '.')
{
printf("%c", a[count]);
total--;
}
if (total == 0)
{
count++;
flag = 1;
break;
}
}
if (flag == 1&&a[count]!='E')
{
printf(".");
while (a[count] != 'E')
{
printf("%c", a[count]);
count++;
}
}
if (flag == 0)
{
while (total > 0)
{
printf("0");
total--;
}
}
}
}
return 0;
}