请设计一个C语言算法完成两个超长正整数的加法。 **输出格式要求:" s1=" " s2=" "s1+s2="
时间: 2023-12-05 13:56:06 浏览: 89
以下是一个简单的实现,仅供参考:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int main() {
char s1[MAX_LEN], s2[MAX_LEN];
int len1, len2, carry = 0, sum[MAX_LEN];
printf("请输入两个正整数s1和s2:\n");
printf("s1=");
scanf("%s", s1);
printf("s2=");
scanf("%s", s2);
len1 = strlen(s1);
len2 = strlen(s2);
// 将两个字符串对齐
int max_len = len1 > len2 ? len1 : len2;
for (int i = 0; i < max_len - len1; i++) {
s1[len1 + i] = '0';
}
for (int i = 0; i < max_len - len2; i++) {
s2[len2 + i] = '0';
}
// 从个位开始相加
for (int i = max_len - 1; i >= 0; i--) {
int x = s1[i] - '0';
int y = s2[i] - '0';
sum[i] = x + y + carry;
carry = sum[i] / 10;
sum[i] %= 10;
}
// 输出结果
printf("s1=%s\n", s1);
printf("s2=%s\n", s2);
printf("s1+s2=");
if (carry != 0) {
printf("%d", carry);
}
for (int i = 0; i < max_len; i++) {
printf("%d", sum[i]);
}
printf("\n");
return 0;
}
```
这个算法的思路是先将两个字符串对齐,然后从个位开始相加,记录进位,最后输出结果。需要注意的是,如果最高位有进位,需要额外输出进位。
阅读全文