加法
#include<stdio.h> #include<string.h> int main() { char a[200], b[200]; int c[200], d[200]; memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); memset(d, 0, sizeof(d)); scanf("%s", a); scanf("%s", b); int len1 = strlen(a), len2 = strlen(b); int i, j; for (i = 0, j = len1 - 1; j >= 0; j--, i++) { c[i] = a[j] - '0'; } for (i = 0, j = len2 - 1; j >= 0; j--, i++) { d[i] = b[j] - '0'; } int maxl; maxl = len1 > len2 ? len1 : len2; for (i = 0; i < maxl; i++) { c[i] += d[i]; if (c[i] >= 10) { c[i] -= 10; c[i + 1] += 1; } } while (c[maxl] == 0 && maxl > 0) maxl--; for (i = maxl; i >= 0; i--) { printf("%d", c[i]); } return 0; }
减法
#include<stdio.h> #include<string.h> int main() { char a[200], b[200]; int c[200], d[200]; memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); memset(d, 0, sizeof(d)); scanf("%s", a); scanf("%s", b); int len1 = strlen(a), len2 = strlen(b); int i, j; for (i = 0, j = len1 - 1; j >= 0; j--, i++) { c[i] = a[j] - '0'; } for (i = 0, j = len2 - 1; j >= 0; j--, i++) { d[i] = b[j] - '0'; } int maxl; maxl = len1 > len2 ? len1 : len2; for (i = 0; i < maxl; i++) { c[i] -= d[i]; if (c[i] < 0) { c[i] += 10; c[i + 1] -= 1; } } while (c[maxl] == 0 && maxl > 0) { maxl--; } for (i = maxl; i >= 0; i--) { printf("%d", c[i]); } return 0; }
乘法
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f #define MAX(x,y) (x>y?x:y) #define MIN(x,y) (x>y?y:x) #define M 1000 char a[M],b[M]; int c[M], d[M],e[M]; int main() { scanf("%s", a); scanf("%s", b); int len1 = strlen(a), len2 = strlen(b); int i, j; for (i = len1 - 1, j = 1; i >= 0; i--, j++) { c[j] = a[i] - '0'; } for (i = len2 - 1, j = 1; i >= 0; i--, j++) { d[j] = b[i] - '0'; } int x; for (i = 1; i <= len1; i++) { x = 0; for (j = 1; j <= len2; j++) { e[i + j - 1] += c[i] * d[j]+x; x = e[i + j - 1] / 10; e[i + j - 1] %= 10; } e[i + len2] = x; } int len3 = len1 + len2; while (e[len3] == 0 && len3 > 1) { len3--; } for (i = len3; i >= 1; i--) { printf("%d", e[i]); } return 0; }
除法
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f #define MAX(x,y) (x>y?x:y) #define MIN(x,y) (x>y?y:x) #define M 1000 char a[M],b[M]; int c[M], d[M],e[M]; int temp[M]; int cmp(int c[], int temp[]) { if (c[0] > temp[0]) return 1; if (c[0] < temp[0]) return -1; for (int i = c[0]; i >= 1; i--) { if (c[i] < temp[i]) return -1; if (c[i] > temp[i]) return 1; } return 0; } void sub(int c[], int temp[]) { int flag = cmp(c, temp); if (flag == 0) { c[0] = 0; return; } if (flag == 1) { for (int i = 1; i <= c[0]; i++) { if (c[i] < temp[i]) { c[i + 1]--; c[i] += 10; } c[i] -= temp[i]; } while (c[0] > 0 && c[c[0]] == 0) { c[0]--; } return; } } int main() { scanf("%s", a); scanf("%s", b); c[0] = strlen(a), d[0] = strlen(b); int i, j; for (i = c[0] - 1, j = 1; i >= 0; i--, j++) { c[j] = a[i] - '0'; } for (i = d[0] - 1, j = 1; i >= 0; i--, j++) { d[j] = b[i] - '0'; } e[0] = c[0] - d[0] + 1; for (i = e[0]; i > 0; i--) { memset(temp, 0, sizeof(temp)); for (j = 1; j <= d[0]; j++) { temp[i + j - 1] = d[j]; } temp[0] = d[0] + i - 1; while (cmp(c, temp) >= 0) { e[i]++; sub(c, temp); } } while (e[0] > 0 && e[e[0]] == 0) { e[0]--; } if (e[0] == 0) { printf("0\n"); } else { for (i = e[0]; i >= 1; i--) { printf("%d", e[i]); } } printf("\n"); if (c[0] == 0) { printf("0\n"); } else { for (i = c[0]; i >= 1; i--) { printf("%d", c[i]); } } return 0; }
C语言大整数加减乘除余
于 2022-01-24 14:22:28 首次发布