题意:给出两个很大的数A,B求和(这里最大位数为1000)
思路:对于很大的数相加,就不能往开int数据类型大小了,试着用char[]或者int[]来存储数位。然后将每一位相加,大于10则进位
完整代码:
#include<cstdio> #include<cstring> char str1[1000], str2[1000]; int a[1001], b[1001]; int main() { int n; scanf("%d", &n); //测试数据组数 int cnt = 0; //输出 Case #时使用 while (n--) { scanf("%s%s", str1, str2); int len1 = strlen(str1), len2 = strlen(str2); //求字符串长度 int i, j, k = 0; for (i = len1 - 1; i >= 0; i--) //将字符型转化为数字 { a[k++] = str1[i] - '0'; } k = 0; for (j = len2 - 1; j >= 0; j--) { b[k++] = str2[j] - '0'; } k = len1 > len2 ? len1 : len2; //求和 for (j = 0; j < k; j++) { a[j] += b[j]; if (a[j] >= 10) { a[j] -= 10; a[j + 1] += 1; } } bool flag = false; printf("Case %d: ", ++cnt); //输出 printf("%s + %s = ", str1, str2); if (a[k] == 0) { for (i = k - 1; i >= 0; i--) { if(!flag&&a[i]==0) continue; else{ printf("%d", a[i]); flag = true; } } } else { for (i = k; i >= 0; i--) { if(!flag&&a[i]==0) continue; else{ printf("%d", a[i]); flag = true; } } } printf(" "); if(n!=0) printf(" "); } return 0; }