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

2020-06-26  本文已影响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

解题思路:

#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;

}


上一篇 下一篇

猜你喜欢

热点阅读