RVBTCC/test/array/bigint.c
2025-05-05 16:20:27 +08:00

54 lines
No EOL
965 B
C

int printf(char* format, ...);
int getchar();
void read(int* a) {
a[0] = 0;
while (1) {
int c = getchar();
if (c == '\n' || c == -1) {
break;
}
if (c >= '0' && c <= '9') {
a[++a[0]] = c - '0';
}
}
for (int j = 1; j <= a[0] / 2; j++) {
int temp = a[j];
a[j] = a[a[0] - j + 1];
a[a[0] - j + 1] = temp;
}
}
void write(int* a) {
int n = a[0];
for (int i = n; i > 0; --i) {
printf("%d", a[i]);
}
printf("\n");
}
void add(int* a, int* b) {
int n = a[0] > b[0] ? a[0] : b[0];
int carry = 0;
for (int i = 1; i <= n; i++) {
int sum = a[i] + b[i] + carry;
a[i] = sum % 10;
carry = sum / 10;
}
if (carry) {
a[n + 1] = carry;
a[0] = n + 1;
} else {
a[0] = n;
}
}
int main() {
int a[100];
int b[100];
read(a);
read(b);
add(a, b);
write(a);
}