写一个c语言求两个不超过200位的非负整数的和。
时间: 2023-11-05 14:11:13 浏览: 30
以下是一个简单的C语言函数,可以实现两个不超过200位的非负整数的加法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 201
char* add(char* num1, char* num2) {
int len1 = strlen(num1), len2 = strlen(num2);
int len = len1 > len2 ? len1 : len2;
// 将 num1 和 num2 补齐到相同长度
char* res = (char*)malloc(sizeof(char) * (len + 1));
memset(res, '0', len + 1);
for (int i = len1 - 1, j = len2 - 1, k = len - 1; k >= 0; i--, j--, k--) {
if (i >= 0) {
res[k] += num1[i] - '0';
}
if (j >= 0) {
res[k] += num2[j] - '0';
}
}
// 处理进位
for (int i = len; i >= 0; i--) {
if (res[i] > '9') {
res[i] -= 10;
res[i - 1] += 1;
}
}
// 去掉前导零
len = strlen(res);
int start = 0;
while (start < len - 1 && res[start] == '0') {
start++;
}
// 返回结果
return res + start;
}
int main() {
char num1[MAX_LEN], num2[MAX_LEN];
printf("请输入两个非负整数(不超过200位):\n");
scanf("%s%s", num1, num2);
char* res = add(num1, num2);
printf("它们的和为:%s\n", res);
free(res);
return 0;
}
```
这个函数首先将两个输入的字符串补齐到相同长度,然后逐位相加并处理进位,最后去掉前导零并返回结果。