高精度加减法(C++)

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
char a1[N], b1[N], c1[N];
int a[N], b[N], c[N];
int main()
{
	cin >> a1 >> b1;
	int l1 = strlen(a1);
	int l2 = strlen(b1);
	
	//转成数字 
	for(int i = 1; i <= l1; i ++){
		a[i] = a1[l1 - i] - '0'; //123,a[1] = 3
	}
	for(int i = 1; i <= l2; i ++){
		b[i] = b1[l2 - i] - '0';
	}

	//计算和的每一位 
	int k = 1, x = 0;
	int len = max(l1, l2);
	int l = len;

	while(len --){
		c[k] = a[k] + b[k] + x; //x是进位 
		x = (a[k] + b[k]) / 10;
		c[k] = (a[k] + b[k]) % 10;
		k ++;
	}
/*减法
    while(len --){
		if(a[k] >= b[k]) c[k] = a[k] - b[k];
		else{
			c[k] = a[k] + 10 - b[k];
			a[k + 1] -= 1; //借位	
		}
		k ++;
	}
*///减法输出时要处理前导零

	int sum = 0;
	for(int i = l; i >= 1; i --){
		sum = sum * 10 + c[i];
	}
	cout << sum;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值