Skip to content

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;
}