原题:1073. Scientific Notation (20)
解题思路:
实际上就是模拟题,考虑好所有情况(需要不需要添0),以及去掉+号即可。
我用的是stl库的函数对字符串进行处理。
代码如下:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int trans(string s)
{
int num = 0;
for(int i = 1; i < s.size(); i++)
num = num * 10 + s[i] - '0';
if(s[0] == '-') return -num;
else return num;
}
int main()
{
string s;
while(cin >> s)
{
string num, pow;
num = s.substr(0, s.find('E'));
pow = s.substr(s.find('E')+1);
int a = trans(pow); //获取指数
if(a > 0)
{
if(a < num.substr(num.find('.')+1).size())
{
num.insert(num.find('.')+a+1, ".");
num.erase(num.find_first_of('.'), 1);
}
else //需要添0
{
int x = num.substr(num.find('.')+1).size();
num.erase(num.find('.'), 1);
for(int i = 0; i < a - x; i++)
num.push_back('0');
}
}
else
{
a = -a;
int x = num.substr(0, num.find('.')).size() - 1;
if(a < x)
{
num.insert(num.find('.')-a, ".");
num.erase(num.find_last_of('.'), 1);
}
else
{
num.erase(num.find('.'), 1);
for(int i = 0; i < a-x; i++)
num.insert(1, "0");
num.insert(1, "0.");
}
}
if(num[0] == '+') num.erase(0, 1);
cout << num << endl;
}
return 0;
}