用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。用C语言来写
时间: 2024-05-05 08:18:05 浏览: 231
好的,这个问题可以用 C 语言来实现大整数的加减法。以下是示例代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1000 // 数组最大长度
typedef struct {
int data[MAX_SIZE]; // 数组存储大整数的每一位
int length; // 数组实际长度
} BigInteger;
// 初始化大整数为0
void initBigInteger(BigInteger *num) {
memset(num->data, 0, sizeof(num->data));
num->length = 1;
}
// 将字符串转换为大整数
void setBigInteger(BigInteger *num, char *str) {
initBigInteger(num);
int len = strlen(str);
int j = 0;
for (int i = len-1; i >= 0; i--) {
num->data[j++] = str[i] - '0';
}
num->length = len;
}
// 输出大整数的值
void printBigInteger(BigInteger num) {
for (int i = num.length-1; i >= 0; i--) {
printf("%d", num.data[i]);
}
printf("\n");
}
// 大整数的加法
BigInteger add(BigInteger num1, BigInteger num2) {
BigInteger result;
initBigInteger(&result);
int carry = 0;
for (int i = 0; i < num1.length || i < num2.length; i++) {
int sum = num1.data[i] + num2.data[i] + carry;
result.data[i] = sum % 10;
carry = sum / 10;
result.length++;
}
if (carry > 0) {
result.data[result.length++] = carry;
}
return result;
}
// 大整数的减法
BigInteger subtract(BigInteger num1, BigInteger num2) {
BigInteger result;
initBigInteger(&result);
int borrow = 0;
for (int i = 0; i < num1.length || i < num2.length; i++) {
int diff = num1.data[i] - num2.data[i] - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result.data[i] = diff;
result.length++;
}
// 去除前导0
while (result.length > 1 && result.data[result.length-1] == 0) {
result.length--;
}
return result;
}
int main() {
BigInteger num1, num2, result;
char str1[MAX_SIZE], str2[MAX_SIZE];
printf("请输入第一个大整数:");
scanf("%s", str1);
setBigInteger(&num1, str1);
printf("请输入第二个大整数:");
scanf("%s", str2);
setBigInteger(&num2, str2);
// 大整数的加减法
result = add(num1, num2);
printf("两个大整数的和为:");
printBigInteger(result);
result = subtract(num1, num2);
printf("两个大整数的差为:");
printBigInteger(result);
return 0;
}
```
以上代码实现了 C 语言中的大整数加减法。在输入两个大整数之后,这段程序将打印出它们的和与差(仅当第一个大整数不小于第二个大整数时输出差)。代码中大整数的存储使用了一个数组,每个元素存放大整数的一位数字。加减法则分别采用了竖式加法和竖式减法算法实现。
阅读全文