[保研/考研机试] KY235 进制转换2 清华大学复试上机题 C++实现

题目链接:

KY235 进制转换2 icon-default.png?t=N6B9https://www.nowcoder.com/questionTerminal/ae4b3c4a968745618d65b866002bbd32

描述

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

输入描述:

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

输出描述:

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

示例1

输入:

10 2
11

输出:

1011

备注:

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

思路:

将M进制数转换为N进制数。可以先将数从M进制转换为十进制,再从十进制转换为N进制。对于本题,需要注意的是,进制大于10时,就要用字符来表示,而这需要实现字符与数字之间的转换。

求解十进制数x的k进制表示时,只需不断地对x求余(对k)、求商(除以k),即可由低到高依次得到各个数位上的数。反过来,要求由k进制表示的数字的十进制值时,需要依次计算各个数位上的数字与该位权重的积(第n位的权重为k"-1),然后将它们依次累加,即可得到该十进制值。

源代码:

#include
#include
#include
using namespace std;

//例题6.4 进制转换2
//将字符转换成整型数
//题目已说明:输入时如有字母,则字母为大写。这里在转换字母是要减去'A'
int CharToInt(char c) {
    if (c >= '0' && c <= '9') {
        return c - '0';
    }
    else {
        return c - 'A' + 10;
    }
}

//将整型数转换成字符串
//题目已说明:输出时如有字母,则字母为小写。这里在转换字母是要加上'a'
char IntToChar(int n) {
    if (n >= 0 && n <= 9) {
        return n + '0';
    }
    else {
        return n - 10 + 'a';
    }
}

int main()
{
    int m, n;
    cin >> m >> n;
    string str;
    cin >> str;
    long long num = 0;

    //m进制转10进制
    for (int i = 0; i < str.size(); i++) {
        num *= m;
        num += CharToInt(str[i]);
    }

    //10进制转n进制 “除n取余法”
    vector nums;
    while (num != 0) {
        nums.push_back(IntToChar(num % n));
        num /= n;
    }
    
    //逆序输出
    for (int i = nums.size() - 1; i >= 0; i--) {
        cout << nums[i];
    }
    cout << endl;

    return 0;
}

提交结果:

[保研/考研机试] KY235 进制转换2 清华大学复试上机题 C++实现_第1张图片

你可能感兴趣的:(机试刷题记录,考研,c++,算法,数据结构,保研机试)