C++大整数的减法

本文详细探讨了如何在C++中处理大整数的减法操作,包括自定义数据结构、大整数的表示方法以及实现减法运算的具体步骤和优化策略。通过对位运算和逻辑判断,确保了大整数减法规则的正确性,适用于需要进行大量大整数计算的场景。
#include <bits/stdc++.h>
using namespace std;

const int maxn = 200 + 10;
typedef long long LL;

string subInfo(char *s1, char *s2) {
	int a[maxn], b[maxn];
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
	int len1 = strlen(s1), len2 = strlen(s2);
	int maxLen = max(len1, len2);
	for (int i = 0; i < len1; i++) a[i] = s1[len1 - i - 1] - '0';
	for (int i = 0; i < len2; i++) b[i] = s2[len2 - i - 1] - '0';
	for (int i = 0; i < maxLen; i++) {
		if (a[i] - b[i] < 0) {
			a[i] = a[i] + 10 - b[i];
			a[i + 1] -= 1;
		}
		else a[i] -= b[i];
	}
	string str = "";
	int i;
	for (i = maxLen - 1; i >= 0; i--)if (a[i] != 0)break;
	for (; i >= 0; i--)str += a[i] + '0';
	return str;
}

string bigIntegerSub(char *s1, char *s2) {
	if (s1 == s2)
		return "0"; //相等
	int len1 = strlen(s1), len2 = strlen(s2);
	if (len1 > len2)
		return subInfo(s1, s2);
	else if (len1 < len2)
		return "-" + subInfo(s2, s1); //负数
	else {               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值