C++:把一个数从M进制转为N进制。

来源:互联网 发布:菲凡网络 编辑:程序博客网 时间:2024/05/19 18:15


先给一张ascii的试验图给大家看,显然可见,'0'+10!='A',所以我们要单独创建一个多进制字符表。

多进制字符映射表。

#include <iostream>#include <string>using namespace std;string chageMtoN(string&str, int M, int N){    int hashch[256];    for (int i = 0; i <= 9; ++i) hashch['0' + i] = i;    for (int i = 10; i <= 35; ++i) hashch['A' + i-10] = i;    char hashnum[256];    for (int i = 0; i <= 9; ++i) hashnum[i] = '0' + i;    for (int i = 10; i <= 35; ++i) hashnum[i] = 'A' + i-10;    //m进制(数字)字符串转为n进制字符串。(先由m进制转为10进制,再由10进制转为n进制)    int realval = 0;    char maxch = hashnum[M];    for (int i = 0; i < str.size(); ++i){        if (str[i]>maxch) return "Error";        realval = M*realval + hashch[str[i]];// /* m进制字符串src转为10进制数i */    }        string res;    while (realval){        int cur = realval%N;        res = hashnum[cur] + res;/* 辗转相除得出逆序的n进制表示在res */        realval = realval / N;    }    return res;}int main(){    while (1){        string str;        int M, N;        cin >>str>> M >> N;        cout << chageMtoN(str, M, N) << endl;    }                return 0;}


0 0
原创粉丝点击