ACM虐我千百遍(一下子水平就侧漏了o(╯□╰)o)
思路很清晰很简单的一道题,大数相加,用字符串来处理
结果转化成代码时频频出错,索引值 + 1 ,-1 错误尤为突出。
又一次被ACM给虐了。
撸代码能力弱爆了。
http://acm.cs.ecnu.edu.cn/problem.php?problemid=1001
不过总算让我给AC
#include<iostream> using namespace std; int main() { void Sum(char A[],char B[],char C[]); char A[550],B[550],C[550]; while(cin >>A && cin >> B) { Sum(A,B,C); cout << C <<endl; } } void Sum(char A[],char B[],char C[]) { int sA = strlen(A); int sB = strlen(B); int max = sA > sB ?sA:sB; //数组分别倒置 for(int i = 0,j = sA - 1;i < j;i++,j--) { int t = A[i]; A[i] = A[j]; A[j] = t; } for(int i = 0,j = sB - 1;i < j;i++,j--) { int t = B[i]; B[i] = B[j]; B[j] = t; } //较短的数组右边补零 if(sA < max) { for(int i = sA;i < max;i++) A[i] = '0'; } if(sB < max) { for(int i = sB;i < max;i++) B[i] = '0'; } //相加 int k = 0; int o = 0; int final = 0; for(int i = 0;i < max;i++) { k = A[i] + B[i] + o - '0' - '0'; if(k >= 10) { k -= 10; o = 1; C[i] = k + '0'; } else { o = 0; C[i] = k + '0'; } final = i; } if(o!=0) { C[final + 1] = '1'; C[final + 2] = '\0'; } else C[final + 1] = '\0'; //把C数组倒置 for(int i = 0,j = strlen(C) - 1; i < j;i++,j--) { char t = C[i]; C[i] = C[j]; C[j] = t; } }