华师一附中OI组
标题:
带小数的加法
[打印本页]
作者:
admin
时间:
2018-4-13 21:09
标题:
带小数的加法
此题用来训练字符串的使用技巧是非常合适的。有些我们人的做事方法和机器是不一样的,要非常注意。
#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;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2