1205:计算两个二十进制数的和
Sample Input:
1234567890
abcdefghij
99999jjjjj
9999900001
Sample Output:
bdfi02467j
iiiij00000
值和字符间的转换关系
两个数字可能不一样长,分别控制。
进位的问题,先不考虑,得到和后再处理。
从末尾开始相加,和值先逆序存储,方便操作。
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;
}