Description
科学记数法是一种记录大数字的简单方法,但是无聊的栗酱修改了规则,这种记数方式可以把大数字用形如 [+/-][B].[C]E[+/-][D]
的字符串表示,其中B,C,DB,C,D的长度分别满足:|B|\le300,|C|\le300,|D|\le5∣B∣≤300,∣C∣≤300,∣D∣≤5,BB保证无前导零,且输入都满足以上格式。
但是这种表示形式过于复杂,栗酱已经不知道如何把它还原成原来的数了,所以聪明的你帮帮栗酱吧。
Input
第一行输入数据组数TT。
接下来有TT行,每行输入一行非空字符串ss。
T \le 20T≤20
|s|\le300∣s∣≤300
Output
每组数据一行,输出还原后的数。
Sample Input 1
3 +123.4E+03 -123.40E-4 +123.4000E+2
Sample Output 1
123400 -0.012340 12340.00
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main()
{
int i, j, k,l;
int T;
cin >> T;
for (i = 0; i < T; i++) {
string s;
string n1 = "";
int n = 0;
char a, b;
cin >> s;
for (j = 0; j < s.length(); j++) {
if (s[j] == '+' || s[j] == '-') {
a = s[j]; continue;
}
if (s[j] == '.') {
l = j; continue;
}
if (s[j] == 'E')break;
n1 += s[j];
}
for (k = j + 1; k < s.length(); k++) {
if (s[k] == '+' || s[k] == '-')b = s[k];
else n = n * 10 + s[k] - '0';
}
int ci;
ci = 0-(j - l - 1);
int sum;
if (b =='-')sum = ci - n;
else sum = ci + n;
double number = stoi(n1);
int d = log10(number) + 1;
int t = abs(sum);
cout << a;
if (sum >= 0) {
number = number * pow(10, sum);
cout<< number << endl;
}
else {
if (t >= d) {
cout << "0.";
for (int i = 0; i < t - d; i++)cout << '0';
cout << number << endl;
}
else {
cout << n1.substr(0,d-t) <<'.'<< n1.substr(d - t) <<endl;
}
}
}
}