题目大意:将科学计数法化为普通的十进制数
输入的形式为 a.deb(0 ≤ a ≤ 9, 0 ≤ d < 10100, 0 ≤ b ≤ 100) ,输出无前导0,无后导0。
由于数字太大,所有用string来做。要考虑的情况好多,一定要理清楚思路。#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1,str2,str3;
int a,b,i,n,j,k,m;
bool flag;
while (cin>>str1)
{
i=n=0;
flag=true;
a=str1.find('e',i);
b=str1.find('.',i);
for(j=a+1; j<str1.size(); j++)
n=n*10+(str1[j]-'0');
str2 = str1.substr(0,a);
str2.erase(b,1);
if(a-b-1>n)
{
string::iterator it1=str2.begin();
str2.insert(it1+b+n,'.');
}
else
{
for(i=0; i<=n-(a-b); i++){
string::iterator it=str2.end();
str2.insert(it,'0');
}
}
i=j=0;
b=str2.find('.',i);
str3=str2.substr(0,b);
if(b<0)
{
i=0;
while(str2[i]=='0'){
j++;
i++;
}
str2=str2.substr(j,str2.size());
}
else
{
for(i=0; i<b; i++)
{
if(str2[i]=='0')
j++;
if(str2[i]!='0'&&flag==true){
k=i;
flag=false;
}
}
m=0;
flag=true;
for(i=str2.size()-1;i>b;i--){
if(str2[i]!='0'&&flag==true){
m=i;
flag=false;
}
}
if(m==0)
str2.erase(b,str2.size());
else
str2.erase(m+1,str2.size());
if(j==str3.size()){
str2.erase(0,b);
str2.insert(str2.begin(),'0');
}
else
str2.erase(0,k);
}
cout<<str2<<endl;
}
return 0;
}
要考虑的情况好多,一定要理清楚思路。