
2高精度加法运算√
发布时间:
【例1】两个正整数的和√
js
int add = 0;//进位数值
int m=max(a[0],b[0]);
for(int i=1;i<=m;i++){
c[i] = a[i] + b[i] + add; // 两数相加
add = c[i] / 10;
c[i] %= 10;
}
// 处理最高位
if (add > 0) { // 有进位
m++;
c[m] = add;
}
// 输出结果
for (int i = m; i >= 1; i--){
cout << c[i];
}
return 0;
}
例2 【【基础】高精度加法
js
#include <bits/stdc++.h>
using namespace std;
int main() {
//第一步:定义两个string类型变量和三个int类型数组;
int a[256], b[256], c[256];
string s1,s2;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
//读入两个高精度整数,存入字符串
cin>>s1>>s2;
//第二步:将两个高精度整数逆序存入a、b两个整数数组中;
for (int i=s1.size()-1,j=1; i >=0; i--,j++) {
a[j] = s1[i] - '0';
}
for (int i=s2.size()-1,j=1; i >=0; i--,j++) {
b[j] = s2[i] - '0';
}
//第三步:从左向右,逐位求和,逐位进位,结果存入c数组;
int len=max(s1.size(),s2.size());
for (int i =1; i<= len ; i ++) {
c[i]+=(a[i]+b[i]);
if (c[i]>10) {
c[i]=c[i]%10; // 不够减,那么向高位借1当10
c[i + 1]++;
}
}
//最高位是否有进位
if(c[len+1]) {
len++;
}
//第四步:逆序输出结果
for (int i=len; i>=1; i--) {
cout<<c[i];
}
return 0;
}