设计一个c语言程序,通过函数实现两个多位正整数的各位数分别相加,得到新一个新的数
时间: 2024-10-18 14:19:40 浏览: 25
C语言编一个程序完成64位数据(无符号)的加法,减法运算
4星 · 用户满意度95%
设计一个C语言程序来实现两位数以上的正整数逐位相加,可以采用递归或迭代的方式。这里提供一个迭代的方法,创建一个名为`addNumbers`的函数:
```c
#include <stdio.h>
#include <string.h>
// 将字符串转换为整数
int strToInt(char *str) {
int num = 0;
for (int i = 0; i < strlen(str); i++) {
num = num * 10 + (str[i] - '0');
}
return num;
}
// 递归函数,处理每一位的相加
char* addDigit(int a, int b) {
char result[4]; // 结果最多3位数加上进位一位
if (b >= 10) { // 当前位进位
result[0] = (a + b / 10) % 10 + '0';
result[1] = (a + b / 10) / 10 + '0';
return result + 2; // 跳过已添加的数字,返回剩余部分
} else {
result[0] = a + b + '0'; // 直接将当前位相加
return result;
}
}
// 主函数
void addTwoNumbers(char* num1, char* num2) {
int len1 = strlen(num1), len2 = strlen(num2);
char* result = malloc((len1 + len2 + 1) * sizeof(char)); // 包含空字符
result[len1 + len2] = '\0';
int carry = 0;
for (int i = len1 - 1; i >= 0; i--) {
int sum = strToInt(addDigit(result[len1 + len2 - 1 - i], num1[i])) + carry;
carry = sum / 10;
result[len1 + len2 - 1 - i] = sum % 10 + '0';
}
// 如果还有进位,向前一位添加
while (carry > 0) {
result[--result] = carry % 10 + '0';
carry /= 10;
}
printf("结果是: %s\n", result);
free(result);
}
int main() {
char num1[] = "12345";
char num2[] = "67890";
addTwoNumbers(num1, num2);
return 0;
}
```
这个程序首先定义了两个辅助函数:`strToInt`用于字符串转整数,`addDigit`用于单个数字位相加并考虑进位。然后在`addTwoNumbers`函数中,遍历输入的两个数字,并通过`addDigit`函数逐位相加。最后,打印出结果并释放动态分配的内存。
阅读全文