下面是高精度加法的函数,可以处理非常大的整数相加。具体解释如下:
输入:两个vector<int>
类型的参数A和B,分别表示相加的两个整数。
输出:返回一个vector<int>
类型的结果C,表示A+B的值。
首先判断A和B哪个长度更短,如果B更短则交换A和B,确保A是长度较短的那个数。
接着定义一个空vector<int>
类型的变量C来存储结果。
然后从低位向高位遍历A和B中每一位数字,并将它们相加,并加上上一轮计算中可能存在的进位t。将得到的和对10取模并保存在C中,同时更新进位t为除以10所得到的商。
当遍历完较短数字(即A)后,如果还有进位t,则将其添加到结果C中。
最后返回结果C即可。
需要注意的是,在这个实现中假设了输入数字都是非负整数。如果需要支持负数相加,则需要额外考虑符号问题,并做出相应修改。
// C = A + B, A >= 0, B >= 0
vector<int> add(vector<int> &A, vector<int> &B)
{
// 如果A的长度小于B的长度,则交换A和B,确保A是较短的数字
if (A.size() < B.size()) return add(B, A);
// 定义一个空vector<int>类型的变量C来存储结果
vector<int> C;
// 定义进位t,并初始化为0
int t = 0;
// 从低位向高位遍历A和B中每一位数字,并将它们相加,并加上上一轮计算中可能存在的进位t。
for (int i = 0; i < A.size(); i ++ )
{
t += A[i];
if (i < B.size()) t += B[i];
// 将得到的和对10取模并保存在C中,同时更新进位t为除以10所得到的商。
C.push_back(t % 10);
t /= 10;
}
// 当遍历完较短数字(即A)后,如果还有进位t,则将其添加到结果C中。
if (t) C.push_back(t);
// 最后返回结果C即可。
return C;
}
对你来说是不是太简单了?
我还是想从头开始,全部发一下