c语言给定两个字符串形式的非负整数num1 和num2,计算它们的和并同样以字符串输出要有C语言完整实现代码
时间: 2024-04-29 07:26:47 浏览: 13
好的,我明白了。以下是给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串输出的C语言完整实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *addStrings(char *num1, char *num2) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int maxlen = len1 > len2 ? len1 : len2;
int *a = (int *)malloc(sizeof(int) * maxlen);
int *b = (int *)malloc(sizeof(int) * maxlen);
memset(a, 0, sizeof(int) * maxlen);
memset(b, 0, sizeof(int) * maxlen);
for (int i = 0; i < len1; i++) {
a[i] = num1[len1 - 1 - i] - '0';
}
for (int i = 0; i < len2; i++) {
b[i] = num2[len2 - 1 - i] - '0';
}
int *c = (int *)malloc(sizeof(int) * (maxlen + 1));
memset(c, 0, sizeof(int) * (maxlen + 1));
for (int i = 0; i < maxlen; i++) {
c[i] += a[i] + b[i];
if (c[i] >= 10) {
c[i] -= 10;
c[i + 1] += 1;
}
}
while (maxlen > 0 && c[maxlen] == 0) {
maxlen--;
}
char *res = (char *)malloc(sizeof(char) * (maxlen + 2));
memset(res, 0, sizeof(char) * (maxlen + 2));
for (int i = 0; i <= maxlen; i++) {
res[i] = c[maxlen - i] + '0';
}
free(a);
free(b);
free(c);
return res;
}
int main() {
char num1[] = "123456789";
char num2[] = "987654321";
char *res = addStrings(num1, num2);
printf("%s\n", res);
free(res);
return 0;
}
```
这段代码中,我们首先将两个字符串形式的非负整数num1和num2转换成对应的整数数组a和b。然后我们再创建一个整数数组c用于存放它们的和,最后再将和转换成字符串形式输出即可。