高精度加法
时间: 2023-10-16 07:17:23 浏览: 142
高精度加法是一种应用广泛的算法,用于对两个大数进行求和。以下是高精度加法的实现步骤:
1. 将两个大数分别存储在两个数组中,注意数组的长度需要根据两个大数的位数来确定。
2. 从低位到高位依次将两个数组中对应位置的数相加,同时考虑进位。
3. 将相加后的结果存储在一个新的数组中,并将进位的值累加到后面的数位中。
4. 最后得到的结果可能会有多余的前导零,需要将其去掉。
以下是一个C++实现的高精度加法函数:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 10010;
int main() {
char a[MAXN], b[MAXN], c[MAXN];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
cin >> a >> b;
int lena = strlen(a), lenb = strlen(b);
int len = max(lena, lenb), carry = 0;
for(int i = 0; i < len; i++) {
int x = i < lena ? a[lena - i - 1] - '0' : 0;
int y = i < lenb ? b[lenb - i - 1] - '0' : 0;
int sum = x + y + carry;
c[i] = sum % 10 + '0';
carry = sum / 10;
}
if(carry) c[len++] = carry + '0';
while(len > 1 && c[len - 1] == '0') len--;
for(int i = len - 1; i >= 0; i--) cout << c[i];
return 0;
}
```
在上面的代码中,我们首先定义了三个数组a、b和c,分别用于存储两个大数和它们的和。然后使用strlen函数求出两个大数的长度,再使用一个变量carry来记录进位的值。接下来使用一个循环从低位到高位依次将两个大数中对应位置的数相加,同时考虑进位。最后得到的结果可能会有多余的前导零,需要将其去掉,然后将c数组中的数倒序输出即可。
阅读全文