标签:
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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<iostream> #include<sstream> #include<cmath> #include<vector> #include<string> using namespace std; int main() { int i, j, m, n, mark, value1, k, value2; string s1, zhishu = ""; cin >> s1; if (s1[0] == ‘+‘){ for (i = 1; i < s1.length(); i++){ if (s1[i] == ‘E‘){ mark = i; break; } } for (j = mark + 2; j < s1.length(); j++) { zhishu = zhishu + s1[j]; } value1 = atoi(zhishu.c_str()); if (s1[mark+1] == ‘-‘){ cout << 0 << "."; value1--; while (value1){ cout << 0; value1--; } for (m = 1; m < mark; m++){ if (m != 2){ cout << s1[m]; } } } else if (s1[mark+1] == ‘+‘){ if (value1 < mark - 3) { for (int l = 1; l < mark; l++){ if (l != 2){ if (l - 2 == value1){ cout << s1[l] << "."; } else{ cout << s1[l]; } } } } else if (value1 >= mark - 3) { for (n = 1; n < mark; n++){ if (n != 2){ cout << s1[n]; } } for (m = 0; m < value1 + 3 - mark; m++){ cout << 0; } } } } if (s1[0] == ‘-‘){ for (i = 1; i < s1.length(); i++){ if (s1[i] == ‘E‘){ mark = i; break; } } for (j = mark + 2; j < s1.length(); j++) { zhishu = zhishu + s1[j]; } value2 = atoi(zhishu.c_str()); if (s1[mark+1] == ‘-‘){ cout << "-" << 0 << "."; value2--; while (value2){ cout << 0; value2--; } for (n = 1; n < mark; n++){ if (n != 2){ cout << s1[n]; } } } else if (s1[mark+1] == ‘+‘){ cout << "-"; if (value2 >= mark - 3) { for (n = 1; n < mark; n++){ if (n != 2){ cout << s1[n]; } } for (m = 0; m < value2 + 3 - mark; m++){ cout << 0; } } else if (value2 < mark - 3){ for (n = 1; n < mark; n++){ if (n != 2){ if (n - 2 == value2){ cout << s1[n] << "."; } else{ cout << s1[n]; } } } } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/capouis/p/4641287.html