3.5小节——问题 B: 数制转换

题目描述:

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。

输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。

样例输入

4 123 10

样例输出

27

代码

#include<cstdio>
#include<cstring>
int main(){
    int a,b;
    char n[40];
    while(scanf("%d %s %d",&a,n,&b)!=EOF){
        int length=strlen(n),i;
        for(i=0;i<length;i++){
            if(n[i]>='0'&&n[i]<='9')n[i]-='0';
            if(n[i]>='a'&&n[i]<='f')n[i]=n[i]-'a'+10;
            if(n[i]>='A'&&n[i]<='F')n[i]=n[i]-'A'+10;
        }                            //将字符值换成实际值 
        int sum=0,product=1;
        for(i=length-1;i>=0;i--){
            sum=sum+(int)n[i]*product;
            product*=a;               //将a进制换成十进制数 
        }
        int num=0;
        memset(n,0,sizeof(n));
        if(b==10)printf("%d\n",sum);
        else{
            do{
                if(sum%b<10)n[num++]=sum%b+'0';
                else n[num++]=sum%b-10+'A';
                sum/=b; 
            }while(sum!=0);
            for(i=num-1;i>=0;i--){
                printf("%c",n[i]);
                if(i==0)printf("\n");
            }
        } 
    }
    return 0;
}
    原文作者:codeup题目解答
    原文地址: https://blog.csdn.net/weixin_42114379/article/details/82312658
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞