作者:柳婼
来源:CSDN
原文:https://blog.csdn.net/liuchuo/article/details/52121350
参考这位大佬实现的,具体思路是用num保存E前面的字符串所对应的数字,exp保存E后面的字符串,不包括符号位。当exp<0时表示小数点向前移动,那么先输出0. 然后输出abs(exp)-1个0,然后继续输出num中的所有数字;当exp>0时候表示向后移动,那么先输出第一个字符,然后将num中尽可能输出n个字符,如果num已经输出到最后一个字符(j == num.length())那么就在后面补exp-cnt个0,否则就补充一个小数点。 然后继续输出t剩余的没有输出的字符~
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int abs(int x)
{
return x < 0 ? -x:x;
}
int main()
{
string str;
while(cin >> str)
{
int k = str.find('E');
string num = str.substr(1, k-1); //num部分
int exp = stoi(str.substr(k+1)); //exp部分
if(str[0] == '-')
cout << str[0];
if(exp < 0) //在这种情况下首先直接输出0.
{
cout << "0.";
for(int i = 0; i < abs(exp)-1; i++)
cout << '0';
for(int i = 0; i < num.size(); i++)
if(num[i] != '.')
cout << num[i];
}
else
{
cout << num[0];
int i = 2, cnt = 0;
for(; i < num.size() && cnt < exp; i++, cnt++)
cout << num[i];
//如果i==num.size()说明num部分输出完毕,接下来输出exp-cnt个0即可
if(i == num.size())
for(int j = 0; j < exp-cnt; j++)
cout << '0';
else //也就是i < num.size(),这时要输出小数点
{
cout << '.'; //小数点的位置就是i前面的那个位置
for(int j = i; j < num.size(); j++)
cout << num[j];
}
}
cout << endl;
}
return 0;
}