题目大意:输入一个科学计数法表示的数字,这个数字没有前导0,形如:a.deb (
0 ≤ a ≤ 9, 0 ≤ d < 10100, 0 ≤ b ≤ 100)。要求输出正常的表示方法,格式要求如果是整数则不能有小数点。
#include<iostream>
#include<string>
using namespace std;
int num=0;//
int get(string s,int &a)
{
for(int i=s.size()-1;i>=0;i--)
{
if(s[i]=='e')
{
break;
}
num++;
}
if(num==1)
{
return s[s.size()-1]-48;
}
else if(num==2)
{
return (s[s.size()-1]-48)+(s[s.size()-2]-48)*10;
}
else if(num==3)
{
return (s[s.size()-1]-48)+(s[s.size()-2]-48)*10+(s[s.size()-3]-48)*100;
}
}
int main()
{
string s;
num=0;
cin>>s;
int pos = s.find('.',0);//小数点位置
int bit = get(s,num);//获得移动小数点次数和数字部分占的长度
int insertbit = pos+bit; //小数点插入位置
s.erase(s.size()-num-1,num+1);//删除e和数字部分
if(insertbit<=s.size()-1)
{
s.insert(insertbit+1,".");
//cout<<s<<endl;
s.erase(pos,1);
//cout<<pos<<endl;
if(s[s.size()-1]=='.')s.erase(s.size()-1,1);//最后一个是小数点删除
int t=s.size()-1;
int zero = 0;
//cout<<s<<endl;
while(t)//小数点后全是0,删除
{
zero++;
if(s[t]!='0'&&s[t]!='.')break;
if(s[t]=='.')
{
s.erase(t,zero+1);
break;
}
t--;
}
//cout<<zero<<endl;
cout<<s<<endl;
}
else
{
s.erase(pos,1);//cout<<s<<endl;cout<<insertbit<<endl;
s.resize(insertbit,'0');//不足部分加0
cout<<s<<endl;
}
}