科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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
思路:
首先打出符号位
分为当指数为正数和为负数的情况:正数时又有末尾加0和不加0的情况:
为正数时:首先打出第一位整数部分,当末尾无需加0时:首先打出a(指数的值)位数字,打出小数点,打出剩余数字
当末尾需要加0时:打出所有的数字,在打出a-(size()-3)个0.
为负数时:先打出‘0.’;然后打出a-1个0;把输入的所有数字打印出来(注意保留最后的0)
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
vector<char> tmp;
vector<char> tmp1;
int a = 0;
double b = 0;
string str;
int i,q,p=0;
getline(cin, str);
for (i = 0; i < str.size(); i++) {
if (str[i] != 'E') {
tmp.push_back(str[i]);
}
else break;
}//系数压入
for (q = i + 1; q < str.size(); q++) {
tmp1.push_back(str[q]);
}//指数压入
if (tmp[0] == '-')cout << tmp[0];//输出符号位
for (int j = 1; j < tmp1.size(); j++) {
a = 10 * a + (tmp1[j] - '0');
}//指数的值
if (tmp1[0] == '+') {
cout << tmp[1] - '0';
if (a >= i - 3) {
for (int n = 3; n < tmp.size(); n++) cout << tmp[n] - '0';
for (int n = 0; n < a-i+3; n++) cout << '0';
}
else {
int n;
for ( n = 3; n < a+3; n++) cout<< tmp[n] - '0';
cout << ".";
for ( n = n; n < tmp.size(); n++) cout << tmp[n] - '0';
}
}//指数大于0的情况
else {
cout << "0.";
for (int n = 0; n < a - 1; n++) cout << '0';
cout << tmp[1] - '0';
for (int n = 3; n < i; n++) cout << tmp[n] - '0';
}//指数小于0的情况
}