应用线性表实现两个超长整数加法运算,用C语言实现
时间: 2023-05-26 14:04:06 浏览: 135
以下是一个C语言实现的例子。其中,LongInt是自定义的结构体类型,用来表示一个超长整数。该结构体类型包含一个char类型数组digits,数组元素用来存储整数各位数字,还包含一个int类型变量length,表示整数的有效位数。
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LENGTH 10001 // 数组最大长度
typedef struct LongInt {
char digits[MAX_LENGTH]; // 存储数字的数组
int length; // 数字的有效位数
} LongInt;
// 将字符串转换成LongInt类型
LongInt str2longint(char *str) {
LongInt num;
int len = strlen(str);
for (int i = 0; i < len; i++) {
num.digits[len-i-1] = str[i] - '0';
}
num.length = len;
return num;
}
// 将LongInt类型转换成字符串
char *longint2str(LongInt num) {
char *str = (char*)malloc(sizeof(char)*(num.length+1));
for (int i = 0; i < num.length; i++) {
str[i] = num.digits[num.length-i-1] + '0';
}
str[num.length] = '\0';
return str;
}
// 高精度加法
LongInt add(LongInt num1, LongInt num2) {
LongInt result = {.length = 0};
int carry = 0; // 进位标志
int len = (num1.length > num2.length) ? num1.length : num2.length;
for (int i = 0; i < len; i++) {
int sum = num1.digits[i] + num2.digits[i] + carry;
carry = sum / 10;
result.digits[i] = sum % 10;
result.length++;
}
if (carry > 0) { // 处理最高位的进位
result.digits[result.length++] = carry;
}
return result;
}
int main() {
char str1[MAX_LENGTH], str2[MAX_LENGTH];
printf("请输入第一个整数:");
scanf("%s", str1);
printf("请输入第二个整数:");
scanf("%s", str2);
LongInt num1 = str2longint(str1);
LongInt num2 = str2longint(str2);
LongInt result = add(num1, num2);
char *str_result = longint2str(result);
printf("结果为:%s\n", str_result);
free(str_result);
return 0;
}
```
这个程序首先读入两个字符串作为超长整数,调用str2longint函数将字符串转换成LongInt类型的数字,然后调用add函数进行加法运算,最后将结果转换成字符串并输出。其中,str2longint函数和longint2str函数用来将字符串和LongInt类型的数字互相转换,add函数用来进行高精度加法运算。
阅读全文