`
linest
  • 浏览: 150157 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

ZOJ-1205* 二十进制加法

    博客分类:
  • acm
 
阅读更多
1205:计算两个二十进制数的和

Sample Input:

1234567890
abcdefghij
99999jjjjj
9999900001


Sample Output:

bdfi02467j
iiiij00000


值和字符间的转换关系

int convertToInt(char src)
{
	if(src>='0'&&src<='9')
		return src-'0';
	else if(src>='a'&&src<='j')
		return src-'a'+10;
}

char convertToChar(int src)
{
	if(src<10)
		return '0'+src;
	else 
		return 'a'+src-10;
}



两个数字可能不一样长,分别控制。
进位的问题,先不考虑,得到和后再处理。
从末尾开始相加,和值先逆序存储,方便操作。
int main()
{
    string s1,s2;
    while(cin>>s1>>s2)
    {
        int i,j,t=0;
        int a[101]={0};
        for(i=s1.size()-1,j=s2.size()-1;i>=0||j>=0;i--,j--,t++)
        {
			//转换成数字
			//独立贡献加
            if(i>=0)
                 a[t]+=convertToInt(s1[i]);

            if(j>=0)
				 a[t]+=convertToInt(s2[j]);
          
			//进位
            if(a[t]>=20)
            {
                a[t+1]+=1;
                a[t]%=20;
            }
        }

		//倒序输出
        if(a[t]!=0)cout<<a[t];
        for(i=t-1;i>=0;i--)
			cout<<convertToChar(a[i]);
        cout<<endl;
    }
  
    return 0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics