zoukankan      html  css  js  c++  java
  • 【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;
    }
    上述代码,提交可以通过.

  • 相关阅读:
    Android学习——day13
    寒假周总结三
    构建之法读书笔记03
    Android学习——day12
    每日日报2020 11/18
    每日日报2020 11/17
    每日日报2020 11/16
    每日日报2020 11/15
    每日日报2020 11/13
    每日日报2020 11/12
  • 原文地址:https://www.cnblogs.com/tensory/p/6590746.html
Copyright © 2011-2022 走看看