题目
科学计数法是科学家轻松处理非常大或非常小的数字的方式。
这种表示法与正则表达式 [+-][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)

  1. #include <iostream>
  2. using namespace std;
  3. string s;
  4. int main() {
  5. cin >> s;
  6. if (s[0] == '-') cout << '-';
  7. int k = s.find('E');
  8. string a = s[1] + s.substr(3, k - 3);
  9. int b = stoi(s.substr(k + 1)) + 1;
  10. if (b <= 0) a = "0." + string(-b, '0') + a;
  11. else if (b >= a.size()) a += string(b - a.size(), '0');
  12. else a = a.substr(0, b) + '.' + a.substr(b);
  13. cout << a;
  14. return 0;
  15. }