高精度正整数加法
目录
输入格式
两行每行一个正整数,不超过100位。
输出格式
一个正整数,表示这两个数字的和。
输入数据 1
9999999
999999999
输出数据 1
1009999998
又是简单的高精度,大家可以多做高精度,锻炼模拟思想
学习之前你需要掌握:for循环,while循环,数组,字符串
为什么要用高精度
因为数字太大了,超出了long long和int的范围,所以数字只能用string(字符串)来代替,运算过程只能自己写,但是不要担心,高精度只不过是模拟,几乎没有算法!
正片开始
首先我们需要将字符串输入并求出它的长度
cin>>s1>>s2;
la=s1.size(),lb=s2.size();
随后将字符串转入数组
for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
有点感觉了吗,我们正式开始“加”了!
思想:lc表示c数组的长度,a数组的第lc位加b数组的lc位在加上进位,得到c数组的第lc位
lc=0;
while(lc<la||lc<lb){
c[lc]=a[lc]+b[lc]+j;
j=c[lc]/10;
c[lc]%=10;
lc++;
}
因为我们知道了c数组的长度,可以不去“0”,但是需要一个特判
c[lc]=j;
if(c[lc]==0) lc--;
输出,完成!
for(i=lc;i>=0;i--)
cout<<c[i];
全篇代码
//(water problem)
#include<bits/stdc++.h>
using namespace std;
const int mx=1010;
int a[mx],b[mx],c[mx];
int la,lb,lc,i,j;
int main()
{
string s1,s2;
cin>>s1>>s2;
la=s1.size(),lb=s2.size();
for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
lc=0;
while(lc<la||lc<lb){
c[lc]=a[lc]+b[lc]+j;
j=c[lc]/10;
c[lc]%=10;
lc++;
}
c[lc]=j;
if(c[lc]==0) lc--;
for(i=lc;i>=0;i--)
cout<<c[i];
return 0;
}
谢谢观看