Codeforces---Barnicle

来源:互联网 发布:如何撤销淘宝投诉 编辑:程序博客网 时间:2024/06/02 07:01
题目大意:将科学计数法化为普通的十进制数

输入的形式为 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());elsestr2.erase(m+1,str2.size());if(j==str3.size()){str2.erase(0,b);str2.insert(str2.begin(),'0');}elsestr2.erase(0,k);}        cout<<str2<<endl;    }    return 0;}

要考虑的情况好多,一定要理清楚思路。
0 0
原创粉丝点击