一,利用字符串
C++中实现高精度加法可以利用字符串来存储大整数,并逐位进行相加。
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
string result; // 存储结果的字符串
int carry = 0; // 进位
// 从个位开始逐位相加
for (int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0 || carry; i--, j--) {
int digit1 = i >= 0 ? num1[i] - '0' : 0;
int digit2 = j >= 0 ? num2[j] - '0' : 0;
int sum = digit1 + digit2 + carry;
carry = sum / 10;
sum %= 10;
result.insert(0, to_string(sum)); // 将当前位的结果插入到结果字符串的最前面
}
return result;
}
int main() {
string num1 = "123456789";
string num2 = "987654321";
string sum = add(num1, num2);
cout << "Sum: " << sum << endl;
return 0;
}
上述代码中,我们定义了一个add
函数来实现高精度加法。两个参数num1
和num2
分别表示要相加的两个大整数。
在函数中,我们先定义一个空字符串result
来存储结果,一个整数carry
来表示进位。然后从个位开始逐位相加,直到两个大整数的所有位都相加完毕,并且进位为0。
在每一位的相加过程中,我们先取出对应位置上的数字,再将两个数字和进位相加。将结果除以10得到新的进位,将结果取模10得到当前位的结果。然后将当前位的结果插入到结果字符串的最前面。
最后,我们将结果字符串返回,并在主函数中输出结果。
使用以上代码,可以得到如下输出:
Sum: 1111111110
这说明123456789 + 987654321的结果是1111111110,符合预期。
二,利用数组
通过数组来存取大整数实现高精度加法的思路与使用字符串类似,只是在存储和操作数字的时候需要做一些调整。
下面是通过数组来存取大整数实现高精度加法的代码示例:
// C = A + B, A >= 0, B >= 0
vector<int> add(vector<int> &A, vector<int> &B)
{
if (A.size() < B.size()) return add(B, A);
vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); i ++ )
{
t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
if (t) C.push_back(t);
return C;
}
注意:数组存取大整数时第一个位置存个位数,然后依次存入。