#include<iostream>
#include<cstring>
using namespace std;
bool isnumber(char c)//判断是否为数字
{
if(c>='0'&&c<='9')return true;
else return false;
}
int main()
{
string line;
getline(cin,line);
int flag=1,flag1,flag2,e=0,n,i=0,now;
int len=line.length();
if(line[0]=='+')flag1=1;//第一位为底数符号
else flag1=0;
line.erase(line.begin());
while(i<len)//处理字符串
{
if(flag&&isnumber(line[i]))//保留数字
{
i++;
}
else if(line[i]=='.')//去掉小数点
{
line.erase(line.begin()+i);
}
else if(line[i]=='E')//指数部分
{
flag=0;
line.erase(line.begin()+i);
}
else if(line[i]=='+')//指数为正
{
flag2=1;
line.erase(line.begin()+i);
}
else if(line[i]=='-')//指数为负
{
flag2=0;
line.erase(line.begin()+i);
}
else if(line[i]=='\0')//字符串结束
{
break;
}
if(!flag&&isnumber(line[i]))//处理指数部分
{
now=line[i]-'0';
e=e*10+now;
line.erase(line.begin()+i);
}
}
if(e==0)
{
flag2=0;
}
if(flag2>0)//指数为正
{
for(i=line.length()-1;i<e;i++)//指数比原数小数点后位数多,可以补0
{
line=line+'0';
}
if(e+1<line.length())//指数比原数小数点后位数少,再相应位置插入小数点
{
line.insert(e+1,".");
}
}
else if(flag2==0)//指数为负
{
for(i=0;i<e;i++)//原数前补0
{
line.insert(0,"0");
}
line.insert(1,".");//插入小数点
}
if(flag1==0)//底数为负
{
line.insert(0,"-");//前补符号
}
cout<<line<<endl;
return 0;
}
来源:CSDN
作者:chang_sheng1
链接:https://blog.csdn.net/chang_sheng1/article/details/104109934