科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include <cstdio> #include <iostream> #include <cmath>
using namespace std;
string *parse(string in) { string *s = new string[3];
int i = 0; while (in[i] != '.') { s[0] += in[i++]; } i++;
while (in[i] != 'E') { s[1] += in[i++]; } i++;
while (i < in.size()) { s[2] += in[i++]; } return s; }
int parseInt(string s) { int num = 0; for (int i = 1; i < s.size(); i++) { num = num * 10 + s[i] - '0'; }
if (s[0] == '-') { num = -num; } return num; }
int main() { string in; cin >> in; string *sci = parse(in);
int eff = parseInt(sci[0]); int pow = parseInt(sci[2]); if (pow >= 0) { printf("%d", eff);
bool havePoint = true; if (sci[1].length() <= pow) { havePoint = false; } int i = 0; for (i = 0; i < sci[1].length() && pow != 0; i++, pow--) { putchar(sci[1][i]); }
if (havePoint) { printf("."); for (; i < sci[1].length(); i++) { putchar(sci[1][i]); } }
while (pow != 0) { printf("0"); pow--; }
} else { if (eff < 0) { printf("-"); eff = -eff; }
printf("0."); for (int i = 1; i < abs(pow); i++) { printf("0"); } printf("%d", eff); cout << sci[1]; } return 0; }
|