题解 | #进制转换2#

进制转换2

https://www.nowcoder.com/practice/ae4b3c4a968745618d65b866002bbd32

思路:

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

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

源代码:

#include<iostream>
#include<string>
#include<vector>
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<char> 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;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务