题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
//从后往前相加,长的一组继续补位(要注意加到最后一位时是否有进位) #include <stdio.h> #include<string.h> int main() { char arr1[10000], arr2[10000]; gets(arr1); gets(arr2); int sz1 = strlen(arr1), sz2 = strlen(arr2), i = 1, j = 1, num = 0, max, min, p[10000] = { 0 }; max = sz1 > sz2 ? sz1 : sz2; min = sz1 > sz2 ? sz2 : sz1; if (arr1[0] == '0') { printf("%s\n", arr2); return 0; } if (arr2[0] == '0') { printf("%s\n", arr1); return 0; } while (i <= min) { p[max - i + 1] = ((arr1[sz1 - i] + arr2[sz2 - i] - 96) % 10 + num) % 10; if (((arr1[sz1 - i] + arr2[sz2 - i] - 96) % 10 + num) == 10) { num = 1; i++; continue; } num = (arr1[sz1 - i] + arr2[sz2 - i] - 96) / 10; i++; } if (num&&sz1==sz2) { p[0] = 1; goto print; } while (i <= max) { if (sz1 > sz2) { p[max - i + 1] = (arr1[sz1 - i] - 48 + num) % 10; num = (arr1[sz1 - i] - 48 + num) / 10; } else if (sz2 > sz1) { p[max - i + 1] = (arr2[sz2 - i] - 48 + num) % 10; num = (arr2[sz2 - i] - 48 + num) / 10; } i++; } print: if (p[0] == 1) { i = 0; } else { i = 1; } while (i <= max) { printf("%d", p[i]); i++; } return 0; }