bjfuOJ 1114 只有方老师还在(模拟题)

只有方老师还在

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交: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;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值