M进制数转为N进制数——C语言实现

题目描述

将M进制的数X转换为N进制的数输出。

输入描述:

输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

输出描述:

输出X的N进制表示的数。

示例1

输入:

10 2
11

输出:

1011

备注:

注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。

题目链接:进制转换2_牛客题霸_牛客网

        这一次题目要求我们将一个M进制数转换为N进制数,其中M和N为任给的位于区间[2,36]内的整数。对这个题不知从何下手的读者,可以先做做十进制数转二进制数十六进制数转十进制数。做过这两道题的读者,应该很容易反应过来这道题就是要我们将前两道题的代码成果做一个结合。

        我们首先将给出的M进制数A转换为十进制数B,再将十进制数B转换为N进制数C输出,最后的C即为所求。在转换过程中思想依然是求余转换反向打印,只是计算过程中需要用十进制做承接。由于最高达到三十六进制,我们刚好使用0~9、a~z作为数码。

        注意到题目给出的进制的范围为[2,36],这就暗示读者至少应该使用一个长整型存储中间的十进制以避免溢出。其次在转换中我们要注意到字母按大写输入,小写输出。以下是写者用字符数组实现的代码。

#include <stdio.h>

int main() {
    int M = 0,N = 0,l = 0;
    long sum = 0;
    char c[100];
    char d[100];
    scanf("%d %d %s",&M,&N,&c);
    for(int i = 0; c[i] != 0; i++){//先转十进制
        sum *= M;
        sum += c[i] <= '9' ? c[i] - '0' : c[i] - 'A' + 10;
    }
    while(sum >= N) {//再转N进制
        d[l] = sum%N > '9' ? sum%N - 10 + 'a' : sum%N + '0';
        l++;
        sum = sum/N;
    }
    d[l] = sum%N > '9' ? sum%N - 10 + 'a' : sum%N + '0';
    while(l >= 0) {//反向输出
        printf("%c",d[l]);
        l--;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值