题目
科学计数法是科学家轻松处理非常大或非常小的数字的方式。
这种表示法与正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+ 相匹配。
整数部分恰好一位,小数部分至少一位,数字以及指数的正负必须给出,即使均为正,也要给出 +。
现在给定科学计数法表示的实数 A,请你在保留所有有效数字的情况下以常规计数法输出 A。
输入格式
共一行,包含科学计数法表示的实数 A。
输出格式
输出常规计数法表示的 A,注意保留所有有效数字,包括尾部 0。
数据范围
输入数字的长度不超过 9999 字节,指数的绝对值不超过 9999。
输入样例1:
+1.23400E-03
输出样例1:
0.00123400
输入样例2:
-1.2E+10
输出样例2:
-12000000000
解法:模拟
可以把底数小数点先移到最左侧,这样指数+1
分别提取出底数和指数,分类讨论补0即可
时间复杂度O(n),空间复杂度O(1)
#include <iostream>
using namespace std;
string s;
int main() {
cin >> s;
if (s[0] == '-') cout << '-';
int k = s.find('E');
string a = s[1] + s.substr(3, k - 3);
int b = stoi(s.substr(k + 1)) + 1;
if (b <= 0) a = "0." + string(-b, '0') + a;
else if (b >= a.size()) a += string(b - a.size(), '0');
else a = a.substr(0, b) + '.' + a.substr(b);
cout << a;
return 0;
}