B1024 科学计数法 (20分)

科学计数法还原

1. 原文

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:

每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

输入样例 1:

1
+1.23400E-03    

输出样例 1:

1
0.00123400   

输入样例 2:

1
-1.2E+10   

输出样例 2:

1
-12000000000

2. 解析思路

以E位置为基准,统计指数和基数

3. AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include<cstdio>
char str[10010];
int main(){
scanf("%s",str);
if (str[0]=='-')
{
printf("-");
}
int pos=1;
for (; str[pos] != 'E'; ++pos);
int flag=1;
if (str[pos+1]=='-')
{
flag=-1;
}
int num=0;
for (int i = pos+2; str[i] != '\0'; ++i)
{
num=num*10+(str[i]-'0');
}
if(num==0){
for (int i = 1; i < pos; ++i)
{
printf("%c", str[i]);
}
}
else if (flag==-1) //+1.23400E-03
{
printf("0.");
for (int i = 1; i < num; ++i)
{
printf("0");
}
printf("%c", str[1]);
for (int i = 3; i < pos; ++i)
{
printf("%c", str[i]);
}
}else if(flag==1){ //-1.2E+10
printf("%c", str[1]);
int cnt=pos-3;
if (cnt<=num) //-1.234E+5
{
for (int i = 3; i < pos; ++i)
{
printf("%c", str[i]);
}
for (int i = 0; i < num-cnt; ++i)
{
printf("0");
}
}else{ //+1.234E+2
int i=3;
for (; i < 3+num; ++i)
{
printf("%c", str[i]);
}
printf(".");
for (; i < pos; ++i)
{
printf("%c",str[i]);
}
}

}
printf("\n");


return 0;
}
本文结束  感谢您的阅读
  • 本文作者: Wang Ting
  • 本文链接: /zh-CN/2019/09/07/B1024/
  • 发布时间: 2019-09-07 10:48
  • 更新时间: 2021-10-29 14:15
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!