题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
//字符串输入考虑数组处理;多个连续字符串输入采用scanf和EOF判断(遇空格或回车停止);对于有进位的需考虑倒序相加,并设置标志位;结束时的标志位通过判断有无优先输入,最后再倒序输出。 #include <stdio.h> #include <string.h> int main() { char str1[10001], str2[10001]; while(scanf("%s %s", str1, str2) != EOF) //输入存成数组 { int num1[10001] = {0}; int num2[10001] = {0}; int len1, len2; len1 = strlen(str1); len2 = strlen(str2); for(int i = 0; i<len1; i++)//倒序存储至另一数组 { num1[i] = str1[len1-1-i] - '0'; } for(int j = 0; j<len2; j++) { num2[j] = str2[len2-1-j] - '0'; } int len = ((len1>len2)?len1:len2); int num[10001] = {0}; int flag = 0; for(int k = 0; k<len+1; k++) //倒序相加,标志位判断进位 { int sum = num1[k] + num2[k] + flag; if(sum<10) { num[k] = sum; flag = 0; } else { num[k] = sum%10; flag = 1; } } if(num[len]) //有进位则输出 { printf("%d",num[len]); } for(int x = 0; x<len; x++) //输出其他 { printf("%d", num[len-1-x]); } printf("\n"); } return 0; }