设计一个程序,实现两个任意长的整数求和运算,用c语言实现
时间: 2023-05-26 14:04:05 浏览: 161
请见以下代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大长度,可根据实际情况修改
// 字符串反转
void reverse(char *str, int len) {
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
// 将字符串转化为整数数组
void stringToIntArray(char *str, int len, int *num) {
for (int i = 0; i < len; i++) {
num[i] = str[i] - '0'; // 字符'0'的ASCII码为48,直接减去即可
}
}
// 将整数数组转化为字符串
void intArrayToString(int *num, int len, char *str) {
for (int i = 0; i < len; i++) {
str[i] = num[i] + '0';
}
str[len] = '\0'; // 字符串末尾必须添加'\0'
}
// 两个任意长的整数相加
char *add(char *a, char *b) {
int la = strlen(a), lb = strlen(b);
int maxi = la > lb ? la : lb;
int numa[MAX_LEN] = {0}, numb[MAX_LEN] = {0}, sum[MAX_LEN] = {0}; // 定义三个数组分别存放两个数和它们的和
char *res = (char *)malloc((maxi + 1) * sizeof(char)); // 动态分配内存,存放结果
stringToIntArray(a, la, numa);
stringToIntArray(b, lb, numb);
for (int i = 0; i < maxi; i++) {
sum[i] += numa[i] + numb[i]; // 从低位到高位相加
sum[i + 1] = sum[i] / 10; // 进位
sum[i] %= 10; // 取模
}
if (sum[maxi] != 0) maxi++; // 如果相加完后还需要进位,结果长度需要加1
intArrayToString(sum, maxi, res);
reverse(res, strlen(res));
return res;
}
int main() {
char a[MAX_LEN], b[MAX_LEN];
scanf("%s %s", a, b);
char *res = add(a, b);
printf("%s\n", res);
free(res); // 动态分配的内存需要手动释放
return 0;
}
```
程序的主要思路是将任意长的两个整数都转换为整数数组进行计算,随后再将结果数组转换为字符串输出。关于加法的具体实现方式,详见注释。
阅读全文