题目:http://acm.hdu.edu.cn/showproblem.php?pid=2100
根据题目意思,现将字符串转化为10进制,再采用10进制加法相加,再转化为26进制.
另一种直接的思路是:采用26进制,模拟加法过程.
思路:用字符串存储两个26进制的数,然后在前面补A(相当于十进制中的0),使两个数对齐,以便进行加法进位.对齐之后,采用26进制,进行加法运算,运算得到的数字,再转化为对应的字符,即可.
C++代码如下:
#include<iostream> #include<string> #include<string.h> using namespace std; int main() { string s1,s2; int i,j; while(cin >> s1 >> s2) { int len_1 = s1.length(); int len_2 = s2.length(); if(len_1<len_2) { s1.swap(s2); int temp = len_1; len_1 = len_2; len_2 = temp; } s1 = 'A' + s1; for(i=len_2;i<=len_1;i++) s2 = 'A'+ s2; //至此,s1和s2已经对齐了,并且前面至少都有一个A,用于进位 int len = s1.length(); int c = 0; for(i=len-1;i>=0;i--) { int x = s1[i] - 'A';//获取字符 s1[i]对应的数字,如s1[i] = 'C',则s[i]-'A' = 2; int y = s2[i] - 'A'; c += (x+y); s1[i] = (c%26) + 'A';//结果存储在 s1中 c /= 26; } for(i=0;i<len;i++) if(s1[i]!='A')//输出的时候,前导A不输出 break; for(j=i;j<len;j++) cout << s1[j]; cout << endl; } return 0; }上述代码,提交可以通过.
来源:https://www.cnblogs.com/tensory/p/6590746.html