1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| #include <stdio.h> #include <string.h> #include <stdlib.h>
int main() { char data[256] = {0}; int mult1_size = 0; int mult2_size = 0; char *mult1 = NULL; char *mult2 = NULL;
printf("Please input mult1:\n"); fgets(data, 256, stdin); mult1_size = strlen(data) - 1; data[mult1_size] = '\0'; mult1 = (char *)malloc(mult1_size + 1 + 1); memset(mult1, 0, mult1_size + 1 + 1); memcpy(mult1, data, mult1_size);
memset(data, 0, 256); printf("Please input mult2:\n"); fgets(data, 256, stdin); mult2_size = strlen(data) - 1; data[mult2_size] = '\0'; mult2 = (char *)malloc(mult2_size + 1 + 1); memset(mult2, 0, mult2_size + 1 + 1); memcpy(mult2, data, mult2_size);
char sum_ret_row = mult1_size+1+1; char sum_ret_col = mult2_size+1+1; char *sum_ret = (char *)malloc(sum_ret_row * sum_ret_col);
for (int i = mult2_size - 1; i >= 0; i--) { char reserve = 0; int sum_ret_i = 0; for (int j = mult1_size - 1; j >= 0; j--) { int m1 = mult1[j] - '0'; int m2 = mult2[i] - '0'; int value = m1 * m2 + reserve;
sum_ret[sum_ret_row * i + sum_ret_i++] = (value % 10) + '0';
if (value > 9) reserve = value / 10; else reserve = 0; } if (reserve != 0) { sum_ret[sum_ret_row * i + sum_ret_i++] = reserve + '0'; } }
char out[256] = {0}; int out_i = 0; for (int i = mult2_size - 1; i > 0; i--) { static int copy = 0; if (copy == 0) { copy++; memcpy(out, &sum_ret[i * sum_ret_row], strlen(&sum_ret[i * sum_ret_row])); }
out_i++; int reserve = 0; int len = strlen(&sum_ret[(i - 1) * sum_ret_row]); for (int j = 0; j < len; j++) { int add1 = out[out_i + j] == 0 ? 0 : out[out_i + j] - '0'; int add2 = sum_ret[(i - 1) * sum_ret_row + j] - '0'; int value = add1 + add2 + reserve;
out[out_i + j] = (value % 10) + '0';
if (value > 9) reserve = value / 10; else reserve = 0; } if (reserve != 0) { out[out_i + len - 1] = reserve + '0'; } }
int len = strlen(out); for (int j = 0; j < len / 2; j++) { char tmp = out[j]; out[j] = out[len - 1 - j]; out[len - 1 - j] = tmp; }
printf("%s * %s = %s\n", mult1, mult2, out);
free(mult1); free(mult2); free(sum_ret);
return 0; }
|