题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
#include <math.h> #include <stdio.h> #include <string.h> int main() { char A[10000] = {0}; char B[10000] = {0}; int C[10002] = {0}; scanf("%s\n%s", A, B); int lena = strlen(A); int lenb = strlen(B); int l = (lena > lenb) ? lena : lenb; for (int i = 0; i < l; i++) { if (lena - i - 1 >= 0 && lenb - i - 1 >= 0) { C[i] = A[lena - i - 1] + B[lenb - i - 1] - 2 * '0'; } else if (lena - i - 1 < 0 && lenb - i - 1 >= 0) { C[i] = B[lenb - i - 1] - '0'; } else if (lena - i - 1 >= 0 && lenb - i - 1 < 0) { C[i] = A[lena - i - 1] - '0'; } }/*数字过大时,直接加会运算出错 long long num=0; for (int i = 0; i<=l; i++) { printf("%d ",C[i]); num += C[i]*pow(10, i); printf("%lld ",num); } printf("%d",num);*/ for (int i = 0; i <= l; i++) { if (C[i] > 9) { C[i + 1] += C[i] / 10; C[i] = C[i] % 10; } } for (int i = l; i >= 0; i--) { if (C[l] != 0) { printf("%d", C[i]); } else if (A[0] == '0' && B[0] == '0') { printf("0"); break; }else if (C[l] == 0 && i != l) { printf("%d", C[i]); } } return 0; }