用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。c语言
时间: 2024-03-18 13:38:56 浏览: 96
二进制的大整数乘法
5星 · 资源好评率100%
下面是用整型数组表示10进制大整数的加减法的示例 C 代码。假设数组 `a` 和 `b` 分别存储两个大整数,数组 `c` 存储计算结果,数组 `len` 存储大整数的位数。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
void add(int a[], int b[], int c[], int len[]) {
int carry = 0;
int i;
for (i = 0; i < len[0] || i < len[1]; i++) {
int sum = a[i] + b[i] + carry;
c[i] = sum % 10;
carry = sum / 10;
}
if (carry > 0) {
c[i] = carry;
len[2] = i + 1;
} else {
len[2] = i;
}
}
void sub(int a[], int b[], int c[], int len[]) {
int borrow = 0;
int i;
for (i = 0; i < len[0] || i < len[1]; i++) {
int diff = a[i] - b[i] - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
c[i] = diff;
}
while (i > 0 && c[i - 1] == 0) {
i--;
}
len[2] = i;
}
int main() {
int a[MAX_LEN], b[MAX_LEN], c[MAX_LEN];
int len[3] = {0};
char str_a[MAX_LEN], str_b[MAX_LEN];
printf("请输入两个大整数,以空格分隔:\n");
scanf("%s %s", str_a, str_b);
len[0] = strlen(str_a);
len[1] = strlen(str_b);
int i;
for (i = 0; i < len[0]; i++) {
a[i] = str_a[len[0] - i - 1] - '0';
}
for (i = 0; i < len[1]; i++) {
b[i] = str_b[len[1] - i - 1] - '0';
}
add(a, b, c, len);
printf("相加的结果为:\n");
for (i = len[2] - 1; i >= 0; i--) {
printf("%d", c[i]);
}
printf("\n");
sub(a, b, c, len);
printf("相减的结果为:\n");
for (i = len[2] - 1; i >= 0; i--) {
printf("%d", c[i]);
}
printf("\n");
return 0;
}
```
在这个示例代码中,我们假设输入的两个大整数都是非负整数。为了避免输入的大整数超过数组的长度,我们限制了最大位数为 `MAX_LEN`。在实际应用中,可以根据具体需求调整数组长度,或者使用动态内存分配。
阅读全文