咳咳大家好,没错我又双叒叕来水博客了。今天还是讲高精度 昨天讲了高精度乘法 好像高精度加法并不需要我讲,不过这没关系,点赞关注谢谢【日常不要脸】
接下来进入正题!
高精度加法的输入和高精度乘法一样,用字符串输入,然后按位处理,然后每一位依次相加,不一样的是高精度加法是a[i]+b[i]存在c[i]中(注意:别高精度乘法做傻了,高精度加法不存在a[i]+b[j]!!!好吧这个错不会有人犯),然后老样子,处理进位,然后去掉前缀0,倒序输出
上代码!
#include <iostream>
using namespace std;
string a, b;
int a1[2000],b1[2000],c[2002];
int main(){
cin >> a >> b;
for(int i = a.size() - 1; i >= 0; i--){//输入第一个数
a1[a.size() -i- 1] = a[i] - '0';
}
for(int i = b.size() - 1; i >= 0; i--){//输入第二个数
b1[b.size() - i - 1] = b[i] - '0';
}
for(int i = 0; i < max(a.size(),b.size()); i++){//按位相加
c[i] = a1[i] + b1[i];
}
int x = 0;
for(int i = 0; i <max(a.size(),b.size()); i++){//处理进位
c[i] += x;
x = c[i] / 10;
c[i] %= 10;
}
int k = max(a.size(),b.size())+ 2;//相加后的最大位数不超过两数位数最大者加一 我加二为保险起见
while(c[k] == 0){//处理前缀0
k--;
}
for(int i = k; i >= 0; i--){//倒序输出
cout << c[i];
}
return 0;
}
注意这里处理进位的时候取模运算和整除不要搞错了!!!