c语言两个多位数求和
时间: 2025-05-24 08:20:16 浏览: 17
### C语言实现多位数求和
对于处理大整数运算,标准C库并不支持超过`long long`类型的数值范围。为了实现任意长度的大整数加法操作,通常采用字符串或者动态分配内存的方式来存储每一位数字。
下面是通过字符数组来表示并计算两个超长正整数相加的例子:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
char* addStrings(const char *num1, const char *num2);
int main() {
// 输入两个大整数作为字符串形式
char num1[256], num2[256];
printf("请输入第一个大整数:\n");
scanf("%s", num1);
printf("请输入第二个大整数:\n");
scanf("%s", num2);
// 调用函数完成两数相加,并打印结果
char *result = addStrings(num1, num2);
printf("两数之和为:%s\n", result);
free(result); // 释放动态分配的空间
return 0;
}
/**
* @brief 计算两个以字符串形式给出的非负整数之和。
*
* @param num1 字符串表示的第一个非负整数
* @param num2 字符串表示的第二个非负整数
* @return 新申请的一块堆空间保存的结果字符串地址
*/
char* addStrings(const char *num1, const char *num2) {
int length1 = strlen(num1), length2 = strlen(num2);
int maxLength = (length1 > length2 ? length1 : length2) + 1;
// 动态分配足够的空间给返回值
char *sum = malloc(maxLength + 1);
memset(sum, '0', maxLength); // 初始化全零填充
sum[maxLength] = '\0'; // 添加字符串结束标志
int carry = 0; // 进位标记
while (--maxLength >= 0 || carry != 0) {
int val1 = --length1 >= 0 ? num1[length1] - '0' : 0;
int val2 = --length2 >= 0 ? num2[length2] - '0' : 0;
int tempSum = val1 + val2 + carry;
*(sum + maxLength) += tempSum % 10;
carry = tempSum / 10;
}
// 如果最高位是多余的‘0’则去掉它
if (*sum == '0') ++sum;
return sum;
}
```
此代码片段展示了如何利用字符数组模拟手工竖式加法规则来进行多精度加法运算[^1]。
阅读全文
相关推荐


















