美文网首页
进制转换——2. 数制转换

进制转换——2. 数制转换

作者: 辘轳鹿鹿 | 来源:发表于2020-06-26 17:13 被阅读0次

    北京大学复试数制转换问题

    题目描述

    求任意两个不同进制非负整数的转换(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)。

    示例1

    输入

    15 Aab3 7

    输出

    210306

    解题思路:

    • 先转为十进制,再转为其他进制
    • 将要用到的字符串长度赋给一个单独的变量,防止用strlen(str)时,因为变动了一个字符,导致strlen(str)发生变化。
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int c2n(char c){
        if(c>='A'&&c<='Z'){
            return c-'A'+10;
        }
        else if(c>='a'&&c<='z'){
            return c-'a'+10;
        }
        else{
            return c-'0';
        }
    }
    
    char n2c(int c){
        if(c<=9){
            return c+'0';
        }
        else{
            return c+'A'-10;
        }
    }
    
    int main(){
    
        int m,n,len,i,na;
        long long int num,tmp;
        char array[100];
        while(scanf("%d %s %d",&m,array,&n)!=EOF){
            num=0;
            na=strlen(array);
    
            for(i=0;i<na;i++){
                array[i]=c2n(array[i]);
                 num=num+array[i];
    
            if(i<na-1){
                num=num*m;}
    
    
            }
    
            if(num==0){
                printf("%lld\n",num);
                continue;
            }
    
            len=0;
            while(num!=0){
                array[len]=num%n;
                num=num/n;
                len++;
            }
    
            for(i=len-1;i>=0;i--)
            {
    
                array[i]=n2c(array[i]);
                printf("%c",array[i]);
            }
            printf("\n");
        }
    
        return 0;
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:进制转换——2. 数制转换

          本文链接:https://www.haomeiwen.com/subject/aceufktx.html