题目描述
小W在iPhone上装了一个计算器程序,可以处理b进制数。亮亮对此非常鄙视,说:“我口算都能把b进制数的加减乘除算出来!”
现有有两个b进制正整数X、Y,亮亮算出了它们的和(也用b进制表示)。你需要写一个对拍程序。
对于大于10进制的整数,在数字9之后用A~F表示10~15。
输入
输入包含多组数据,请处理到EOF。
每组数据1行,包含一个十进制正整数b,以及两个b进制非负整数X、Y,用空格分割。
对于100%的数据,满足2<=b<=16,结果的十进制表示不超过18位。
输入文件满足测试数据组数小于等于10000。
输出
对于每组输入,输出1行,1个b进制数,表示X和Y的和。
样例输入
10 1 2
2 1 1
16 9 2
16 A A
样例输出
3
10
B
14
提示
使用Java。——zh0ng
来源
XDUACM 2014暑期集训第7场
#include <bits/stdc++.h>
using namespace std;
long long Atoi(string s,int radix)
{
long long ans=0;
for(int i=0;i<(int)s.size();i++)
{
char t=s[i];
if(t>='0'&&t<='9') ans=ans*radix+t-'0';
else ans=ans*radix+t-'A'+10;
}
return ans;
}
string intToA(long long n, int radix)
{
string ans = "";
do {
int t = n % radix;
if (t >= 0 && t <= 9) ans += t + '0';
else ans += t - 10 + 'A';
n /= radix;
} while (n != 0);
reverse(ans.begin(), ans.end());
return ans;
}
int main() {
int n;
string s1, s2;
while (cin >> n >> s1 >> s2) {
cout << intToA(Atoi(s1, n) + Atoi(s2, n), n) << endl;
}
return 0;
}