超长正整数的加法,设计一个程序实现两个任意长的整数求和运算,使用c语言运算
时间: 2023-05-27 16:07:36 浏览: 151
思路:
1. 读入两个超长正整数,可以使用字符串读入,将字符串转换为整数数组。
2. 对两个整数数组进行加法运算,从低位到高位依次相加,每一位的和取模10得到该位的结果,进位则在下一位加上1。
3. 将相加后的结果转换为字符串输出。
代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大长度
int main() {
char str1[MAX_LEN + 1], str2[MAX_LEN + 1]; // 定义字符数组
int num1[MAX_LEN + 1], num2[MAX_LEN + 1], result[MAX_LEN + 1]; // 定义整数数组
int len1, len2, len, carry = 0; // len1和len2分别为两个整数的长度,len为相加后的长度,carry为进位数
int i, j; // 循环计数器
// 读入两个超长正整数
printf("请输入第一个整数:");
scanf("%s", str1);
printf("请输入第二个整数:");
scanf("%s", str2);
len1 = strlen(str1);
len2 = strlen(str2);
// 将字符数组转换为整数数组
for (i = 0; i < len1; i++) {
num1[i] = str1[len1 - i - 1] - '0';
}
for (i = 0; i < len2; i++) {
num2[i] = str2[len2 - i - 1] - '0';
}
// 对两个整数数组进行加法运算
len = len1 > len2 ? len1 : len2; // 取两个数中较大的长度
for (i = 0; i < len; i++) {
result[i] = num1[i] + num2[i] + carry; // 相加并加上进位
carry = result[i] / 10; // 计算进位
result[i] %= 10; // 取模得到该位的结果
}
if (carry > 0) { // 如果最高位有进位
result[len++] = carry; // 将进位加到最高位
}
// 将整数数组转换为字符串
printf("两数之和为:");
for (i = len - 1; i >= 0; i--) {
printf("%d", result[i]);
}
printf("\n");
return 0;
}
```
阅读全文