本文主要是介绍【hdoj_2100】Lovekey(大数+字符处理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目: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;
}
上述代码,提交可以通过.
这篇关于【hdoj_2100】Lovekey(大数+字符处理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!