c++1.实现和不超过100位的超长整数加法。从键盘输入任意两个不超过100位的十进制超长整数(和不超过100位),输出相加的结果。 提示:用数组存储两个长整数,模拟竖式加法,可考虑联合使用整除“/”和求余“%”实现进位加。
时间: 2024-03-10 15:49:20 浏览: 152
好的,这是一道很经典的大数加法问题。以下是C++的代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_N = 105;
int main() {
char s1[MAX_N], s2[MAX_N]; // 存储两个超长整数
int a[MAX_N], b[MAX_N], c[MAX_N]; // 分别存储两个整数以及它们的和
memset(a, 0, sizeof(a)); // 初始化为0
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
// 输入两个超长整数
cin >> s1 >> s2;
int len1 = strlen(s1), len2 = strlen(s2);
// 将字符数组转为整数数组
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';
// 计算两数之和
int len = max(len1, len2); // 和的位数不超过较长整数的位数
for (int i = 0; i < len; i++) {
c[i] += a[i] + b[i];
if (c[i] >= 10) { // 进位
c[i+1]++;
c[i] -= 10;
}
}
// 输出结果
while (len > 1 && c[len-1] == 0) len--; // 去掉高位的0
for (int i = len - 1; i >= 0; i--) cout << c[i];
cout << endl;
return 0;
}
```
这个代码的时间复杂度为 $O(n)$,其中 $n$ 为两个超长整数中位数较大的那个数。
阅读全文