大整数加减乘除法C语言
时间: 2023-10-14 09:29:49 浏览: 48
以下是C语言实现大整数加减乘除法的示例代码:
1. 大整数加法
```c
#include<stdio.h>
#include<string.h>
#define MAXN 1010
int a[MAXN], b[MAXN], c[MAXN];
void add(int a[], int b[], int c[]) {
int carry = 0;
for (int i = 0; i < MAXN; i++) {
c[i] = a[i] + b[i] + carry;
if (c[i] >= 10) {
carry = 1;
c[i] -= 10;
} else {
carry = 0;
}
}
}
int main() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
char str1[MAXN], str2[MAXN];
scanf("%s %s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
a[len1 - i - 1] = str1[i] - '0';
}
for (int i = 0; i < len2; i++) {
b[len2 - i - 1] = str2[i] - '0';
}
add(a, b, c);
int i;
for (i = MAXN - 1; i >= 0; i--) {
if (c[i] != 0) {
break;
}
}
for (; i >= 0; i--) {
printf("%d", c[i]);
}
return 0;
}
```
2. 大整数减法
```c
#include<stdio.h>
#include<string.h>
#define MAXN 1010
int a[MAXN], b[MAXN], c[MAXN];
void sub(int a[], int b[], int c[]) {
for (int i = 0; i < MAXN; i++) {
c[i] = a[i] - b[i];
if (c[i] < 0) {
c[i] += 10;
a[i + 1]--;
}
}
}
int main() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
char str1[MAXN], str2[MAXN];
scanf("%s %s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
a[len1 - i - 1] = str1[i] - '0';
}
for (int i = 0; i < len2; i++) {
b[len2 - i - 1] = str2[i] - '0';
}
sub(a, b, c);
int i;
for (i = MAXN - 1; i >= 0; i--) {
if (c[i] != 0) {
break;
}
}
for (; i >= 0; i--) {
printf("%d", c[i]);
}
return 0;
}
```
3. 大整数乘法
```c
#include<stdio.h>
#include<string.h>
#define MAXN 1010
int a[MAXN], b[MAXN], c[MAXN];
void mul(int a[], int b[], int c[]) {
memset(c, 0, sizeof(c));
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++) {
c[i + j] += a[i] * b[j];
}
}
for (int i = 0; i < MAXN - 1; i++) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
int main() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
char str1[MAXN], str2[MAXN];
scanf("%s %s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
a[len1 - i - 1] = str1[i] - '0';
}
for (int i = 0; i < len2; i++) {
b[len2 - i - 1] = str2[i] - '0';
}
mul(a, b, c);
int i;
for (i = MAXN - 1; i >= 0; i--) {
if (c[i] != 0) {
break;
}
}
for (; i >= 0; i--) {
printf("%d", c[i]);
}
return 0;
}
```
4. 大整数除法
```c
#include<stdio.h>
#include<string.h>
#define MAXN 1010
int a[MAXN], b[MAXN], c[MAXN], d[MAXN];
void div(int a[], int b[], int c[], int d[]) {
memset(c, 0, sizeof(c));
memset(d, 0, sizeof(d));
int lena, lenb, len;
for (lena = MAXN - 1; lena >= 0 && a[lena] == 0; lena--);
for (lenb = MAXN - 1; lenb >= 0 && b[lenb] == 0; lenb--);
if (lenb > lena) {
len = 1;
d[0] = 0;
return;
}
len = lena - lenb + 1;
for (int i = lena; i >= lenb; i--) {
int t = 0;
while (a[i] >= b[lenb - 1] && t < 10) {
t++;
int carry = 0;
for (int j = 0; j < lenb; j++) {
int tmp = a[i - j] - t * b[lenb - j - 1] - carry;
if (tmp < 0) {
tmp += 10;
carry = 1;
} else {
carry = 0;
}
a[i - j] = tmp;
}
c[i - lenb + 1] = t;
}
}
for (int i = len - 1; i >= 0; i--) {
d[i] = a[i];
}
}
int main() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
memset(d, 0, sizeof(d));
char str1[MAXN], str2[MAXN];
scanf("%s %s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
a[len1 - i - 1] = str1[i] - '0';
}
for (int i = 0; i < len2; i++) {
b[len2 - i - 1] = str2[i] - '0';
}
div(a, b, c, d);
int i;
for (i = MAXN - 1; i >= 0; i--) {
if (c[i] != 0) {
break;
}
}
for (; i >= 0; i--) {
printf("%d", c[i]);
}
printf("\n");
for (i = MAXN - 1; i >= 0; i--) {
if (d[i] != 0) {
break;
}
}
for (; i >= 0; i--) {
printf("%d", d[i]);
}
return 0;
}
```