代码如下
注释很多就不再写题记了,注意消掉指数部分的前导0
#include <iostream>
#include <string>
using namespace std;
int main()
{
string num,exponent;//E前面的系数和E后面的指数分开存
getline(cin,num,'E');//读到E停并且把E给删了
getline(cin,exponent);
if(num[0]=='-')
cout<<num[0];//如果是负号把符号直接输出然后删除,正好直接删除
num.erase(num.begin());
int count=0;//小数点以后有几个数
int multi_ten=0;//指数转换成十进制数
count=num.size()-2;//除去第一个数和小数点
num.erase(num.begin()+1);//把小数点删了,到时候只用找一个新的小数点的位置(如果需要的话),怕忘了
if(exponent[0]=='-'){//如果指数是负数
exponent.erase(exponent.begin());//符号没用了,删掉
while(exponent[0]=='0') //删掉前导0
exponent.erase(exponent.begin());
if(exponent.size()==0){ //说明指数就是0,再加一个小数点到1号位就行了,注意这里的小数点是字符串而不是字符
exponent.insert(1,".");
cout<<num<<endl;
}
else{
while(exponent.size()!=0){ //进行指数的计算
multi_ten*=10;
multi_ten+=exponent[0]-'0';
exponent.erase(exponent.begin());
}
for(int i=0;i<multi_ten;i++){
if(i==0)
cout<<"0.";
else{
cout<<"0";
}
}
cout<<num<<endl;
}
}
else{ //如果指数是正数
exponent.erase(exponent.begin());//符号没用了,删掉
while(exponent[0]=='0') //删掉前导0
exponent.erase(exponent.begin());
if(exponent.size()==0){ //说明指数就是0,再加一个小数点到1号位就行了,注意这里的小数点是字符串而不是字符
num.insert(1,".");
cout<<num<<endl;
}
else{
while(exponent.size()!=0){ //进行指数的计算
multi_ten=multi_ten*10;
multi_ten+=exponent[0]-'0';
exponent.erase(exponent.begin());
}
if(count>multi_ten){//指数比较小还得添上小数点
num.insert(multi_ten+1,".");
cout<<num<<endl;
}
else{
cout<<num;
for(int i=0;i<multi_ten-count;i++)
cout<<"0";
cout<<endl;
}
}
}
return 0;
}