乙级 PAT 1024. 科学计数法 (20)
2018-01-04 22:35
375 查看
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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> #include<string.h> #include<math.h> int main() { int i = 0, n, c, pos_e; double exp=0; char a[10000]; gets(a); n = strlen(a); if (a[0] == '-') printf("-"); for (i = 1; i < n; i++) { if (a[i] == 'E') { pos_e = i; break; } } for (i = pos_e+2; i < n; i++) { exp = exp + (a[i]-'0')*pow(10,n-i-1); } if (exp == 0) { for (i = 1; i < pos_e; i++) { printf("%c", a[i]); } } if (a[pos_e + 1] == '-') { printf("0."); for (i = 0; i < exp - 1; i++) { printf("0"); } for (i = 1; i < pos_e; i++) { if (a[i] != '.') printf("%c", a[i]); } } else if (a[pos_e + 1] == '+') { for (i = 1; i < pos_e; i++) { if (a[i] != '.') printf("%c", a[i]); if (exp + 2 < pos_e - 1 && i == exp + 2) printf("."); } for (i = 0; i < exp + 2 - (pos_e - 1); i++) { printf("0"); } } printf("\n"); return 0; }
相关文章推荐
- pat 乙级 1024. 科学计数法 (20)
- PAT 乙级 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)--PAT乙级
- PAT乙级—1024. 科学计数法 (20)-native
- PAT乙级1024. 科学计数法 (20)
- PAT乙级1024. 科学计数法 (20)
- 【PAT】(乙级)1024. 科学计数法 (20)
- 1024. 科学计数法 (20)(PAT乙级题库)
- PAT乙级 1024. 科学计数法 (20)
- PAT乙级(中文)1024. 科学计数法 (20)
- 1024. 科学计数法 (20)-PAT乙级真题
- PAT乙级1024. 科学计数法 (20)
- PAT 乙级 1024. 科学计数法 (20)
- 浙江大学PAT_乙级_1024. 科学计数法 (20)
- PAT乙级 1024. 科学计数法 (20)--字符串的分割和移位
- 1024. 科学计数法 (20) PAT乙级真题
- 1024. 科学计数法 (20)--浙大PAT乙级真题java实现
- pat乙级真题:1024. 科学计数法 (20)
- [PAT乙级]1024. 科学计数法 (20)
- PAT乙级1024(C语言)-科学计数法 (20)