只有方老师还在
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:119 测试通过:24
总提交:119 测试通过:24
描述
大家还记得那位神秘人反复说的话吧:“昨天晚上杨菁老师先走了,只有方老师还在……”
方老师是谁?为什么还在?他在干什么……
ACM爱好者协会成员很想知道,大胆的yujiaao通过暗地访问终于得到了答案:
原来方老师在一个神秘的地方,专心研究进制的转换,不过他遇到了问题,作为大牛的你能帮他AC么,方老师会带你去2048年旅游哦~
这次的A和B是两个进制不同的数,分别用k1和k2表示,要求输出A+B的和,用k3进制表示
注意,A和B在10进制下不会大于2^31;k1,k2和k3都小于36,大于1;若进制数大于10,则用大写字母“A”表示10,用大写字母“B”表示11,以此类推
输入
第一行输入一个T表示测试数据的组数
接下来T组测试数据 每组三行
第一行有两个数,分别是A和k1,之间一个空格;第二行有两个数,分别是B和k2,之间一个空格;
第三行有一个整数 表示 输出A+B的进制数
输出
对于每组数据输出占一行,输出对应结果,每两组数据之间一个空行,最后一组数据后面没有空行
样例输入
2
10 10
100 10
10
111 2
100 10
10
样例输出
110
107
·模拟题,注意细节就好
·两个函数: 一个计算k进制数m的 十进制形式为多少, 之后相加使用print()函数打印即可。
int deal(char f[],int k){
//返回进制的10进制形式
int len = (int)strlen(f);
int num=0;int t=1;
for(int i=len-1;i>=0;i--){
if(f[i]>='A'){
num += (t*(f[i]-'A'+10));
}else num += (t*(f[i]-'0'));
t = t*k;
}
return num;
}
void print(int n,int k){
//把数字n按照k进制输出
stack<char> s;
while(n){
int t = n%k;
if(t>=10){
s.push(t-10+'A');
}else{
s.push(t+'0');
}
n = n/k;
}
while(!s.empty()){
printf("%c",s.top());
s.pop();
}printf("\n");
}
char f[N];
int main(){
int t;scanf("%d",&t);
int flag=0;
while(t--){
int k;
int num1,num2;
scanf("%s %d",f,&k);
num1 = deal(f,k);
scanf("%s %d",f,&k);
num2 = deal(f,k);
scanf("%d",&k);
if(flag) printf("\n");
flag=1;
print(num1+num2,k);
}
return 0;
}