标题信息: 手动求大的实数在一起,
AC代码:
/** *大实数相加,以小数点为分界,模拟加法运算,最后合并 */ #include<iostream> #include<string> #include<algorithm> using namespace std; string add(string s1,string s2){//字符串模拟大整数加法,模拟结果有前导0 int i,j,len1,len2; len1=s1.size(); len2=s2.size(); //寻找小数点的位置 for(i=0;s1[i]!='.'&&i<len1;i++); for(j=0;s2[j]!='.'&&j<len2;j++); //cout<<i<<" "<<j<<endl; string s,ss; int flag=0; //模拟小数点后面的数相加 len1--; len2--; while(len1-i>len2-j){ int sum=flag+(s1[len1--]-'0'); s+=char ((sum)%10+'0'); flag=sum/10; } //cout<<s<<endl; while(len2-j>len1-i){ int sum=flag+(s2[len2--]-'0'); s+=char ((sum)%10+'0'); flag=sum/10; } //使小数点后位数对齐之后相加 int len11,len22; if(len1-i>len2-j){ len11=len1-((len1-i)-(len2-j)); len22=len2; } else{ len22=len2-((len2-j)-(len1-i)); len11=len1; } while(len11>i&&len22>j){ int sum=flag+(s1[len11--]-'0')+(s2[len22--]-'0'); s+=char ((sum)%10+'0'); flag=sum/10; } /**迭代器去除字符’0‘ while(len11>i){ int sum=flag+(s1[len11--]-'0'); s+=char ((sum)%10+'0'); flag=sum/10; } while(len22>j){ int sum=flag+(s2[len22--]-'0'); s+=char ((sum)%10+'0'); flag=sum/10; } string::iterator it;//定义方向迭代器 for(it=s.begin();*it=='0'&&it!=s.end();it++){//去掉s的前缀0,即小数后的0 s.erase(it); }**/ //cout<<s<<endl; string ss0;//用ss0去掉前导0 int kk; for(kk=0;kk<s.size()&&(s[kk]=='0'||s[kk]=='.');kk++); for(int k=kk;k<s.size();k++) ss0+=s[k]; //cout<<ss0<<endl; for(int i=0;i<ss0.size()/2;i++){ char c=ss0[i]; ss0[i]=ss0[ss0.size()-i-1]; ss0[ss0.size()-i-1]=c; } //模拟小数点前面的数相加 len1=i-1; len2=j-1; while(len1>-1&&len2>-1){ int sum=flag+(s1[len1--]-'0')+(s2[len2--]-'0'); ss+=char ((sum)%10+'0'); flag=sum/10; } while(len1>-1){ int sum=flag+(s1[len1--]-'0'); ss+=char ((sum)%10+'0'); flag=sum/10; } while(len2>-1){ int sum=flag+(s2[len2--]-'0'); ss+=char ((sum)%10+'0'); flag=sum/10; } if(flag) ss+=char ('0'+flag); //cout<<s<<endl; for(int i=0;i<ss.size()/2;i++){ char c=ss[i]; ss[i]=ss[ss.size()-i-1]; ss[ss.size()-i-1]=c; } //cout<<ss<<endl; if(!ss0.empty()&&ss0[0]!='.') ss=ss+'.'+ss0; if(!ss0.empty()&&ss0[0]=='.') ss=ss+ss0; return ss; } int main() { string s1,s2; while(cin>>s1>>s2){ cout<<add(s1,s2)<<endl; } return 0; }
版权声明:本文博主原创文章,博客,未经同意不得转载。