这是一题简单的大数相加题目。基本功好的10—15分钟之内就可以AC,但是因为他的数字和平常见到的有点不同,所以有时候就会犯下低级错误,我们认为是对的,可是有时候不以按照常规思维来看待。这题说白了,就是两个26进制的字符串相加,和10进制的没为什么区别,唯一的就是相加进位的时候需要注意一下:这里的A相当于0而不是1,所以进位之后最首位补的是B而不是A,还有就是进位之后本来的这一位应该减去26而不是25,剩下的就是将数字前面多余的A去掉(类似于去掉十进制前面的0)这样就可以直接写出答案,没有必要转换那么麻烦。最后一点就是如果所以的数字都是A的话应该输出一个A,而不是所有的A不是0也不是什么都没有。这几点说清楚之后剩下的问题就好办了,因为剩下的就是和10进制数字相加一样了。
#include<iostream> using namespace std; #include<string> string plus(string a,string b) { int i,j,i1,j1; string c; if(a.size()>b.size()) { c=a; a=b; b=c; } i1=a.size()-1; j1=b.size()-1; for(i=i1,j=j1;i>=0;i--,j--) b[j]+=a[i]-'A'; for(j=j1;j>0;j--) if(b[j]>'Z') { b[j]-=26; b[j-1]++; } if(b[0]>'Z') { b[0]-=26; b='B'+b; } return b; } int main() { string a; string b; while(cin>>a>>b) { a=plus(a,b); for(int i=0;i<a.size();i++) if(a[i]=='A'); else break; if(i==a.size()) cout<<"A"<<endl; for(int j=i;j<a.size();j++) cout<<a[j]; cout<<endl; } return 0; }