题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
#include <stdio.h> #include <string.h> char* add(char* str1, int len1, char* str2, int len2) { int j = len1-1; char std[10002] = { 0 }; for (int i = len2-1; i >= 0; i--) { int num1 = str2[i] - '0'; int num2 = str1[j] - '0'; if (num1 + num2 > 9) { str1[j] = (num1 + num2) % 10 + '0'; std[j-1] = (num1 + num2) / 10+'0'; } else str1[j] = (num1 + num2) + '0'; j--; } int flag = 0; char* result = str1; int i = 0; for (int i = 0; i < len1; i++) { if (std[i]) { flag = 1; break; } } if (flag == 1) { for (int i = 0; i < len1; i++) { if (std[i] == 0) std[i] = '0'; } result = add(str1, len1, std,len1); } return result; } int main() { char str1[10002] = { 0 }; char str2[10002] = { 0 }; scanf("%s", str1); scanf("%s", str2); memmove(&str1[1], str1, 10001); str1[0] = '0'; memmove(&str2[1], str2, 10001); str2[0] = '0'; int len1 = strlen(str1); int len2 = strlen(str2); char* result = NULL; if(len1>len2) result = add(str1, len1, str2, len2); else result = add(str2, len2, str1, len1); if(result[0]=='0') memmove(result,&result[1],10001); printf("%s", result); return 0; }