|
此题用来训练字符串的使用技巧是非常合适的。有些我们人的做事方法和机器是不一样的,要非常注意。
- #include<iostream>
- using namespace std;
- string s1,s2,s3;
- int i,j,xx1,xx2,xx3;
- int l1,l2,p1,p2,x1,x2,z1,z2;
- int main()
- {
- cin>>s1>>s2;
- ///用字符串的唯一目的就是读入方便
- l1=s1.size(),l2=s2.size();
- p1=s1.find('.',0),p2=s2.find('.',0); ///找到小数点的位置,记下来
- z1=p1,z2=p2;///记录整数部分的长度
- x1=l1-p1-1,x2=l2-p2-1; ///记录小数部分的长度
- if (z1<z2) for (i=1; i<=z2-z1; i++) s1='0'+s1;
- else for (i=1; i<=z1-z2; i++) s2='0'+s2;
- if (x1<x2) for (i=1; i<=x2-x1; i++) s1=s1+'0';
- else for (i=1; i<=x1-x2; i++) s2=s2+'0';
- ///整数部分和小数部分分别对齐
- cout<<s1<<endl<<s2<<endl;
- int p3=s1.find('.',0); ///记录结果的小数位置
- s1.erase(p3,1),s2.erase(p3,1); ///删除掉小数点
- l1=s1.size();
- j=0; ///进位
- for (i=l1-1; i>=0; i--)
- ///从右往左加
- {
- xx1=s1[i]-'0';///字符变数字
- xx2=s2[i]-'0';
- xx3=xx1+xx2+j;
- if(xx3>=10)(j=1,xx3-=10);///进位处理
- else (j=0);
- s3=char(xx3+'0')+s3;
- ///数字变字符并加在结果左边
- }
- s3.insert(p3,"."); ///添加小数点
- if (j==1) s3='1'+s3; ///首位进位处理
- while (s3[s3.size()-1]=='0') s3.erase(s3.size()-1,1);///删除末尾的0
- if (s3[s3.size()-1]=='.') s3.erase(s3.size()-1,1); ///最末尾是小数点也删掉
- cout<<s3;
- return 0;
- }
复制代码 |
|