任意进制的转换(base2-base36)

来源:互联网 发布:阿里域名隐私保护 编辑:程序博客网 时间:2024/06/05 17:02

思路和普通的十进制转任意进制相同,假设将M进制转N进制,则基本思路为:M/N的余数的N进制表示作为结果的第一位,商的M进制表示作为下一论循环的输入。直到M为0为止。

参考:http://www.cnblogs.com/pkuoliver/archive/2010/10/27/convert-m-number-to-n-number.html

#include <iostream>#include <string>#include <algorithm>using namespace std;char getStrFromInt(int value){if(value >= 0 && value <= 9)return (value + '0');if(value >= 10 && value <= 35)return ('a' + (value-10));elsecout << "error!!!" << endl;return '#';}int getIntFromStr(char value){if(value >= '0' && value <= '9')return value - '0';else if(value >= 'a' && value <= 'z')return (value - 'a') + 10;}char qiuyu(string &num, int M, int N){int remain = 0;string shang;for(int i=0; i<num.size(); i++){remain = remain*M + getIntFromStr(num[i]);shang += getStrFromInt(remain / N);remain = (remain % N); }while(shang.size() > 0 && shang[0] == '0'){shang = shang.substr(1, shang.size()-1);}num = shang;return getStrFromInt(remain);}string baseConvert(string num, int M, int N){string result;string shang = num;while(shang.size() > 0){result += qiuyu(shang, M, N);}std::reverse(result.begin(), result.end());return result;}int main(){string bin = "10101010101010101010101010101010110";string b36 = baseConvert(bin, 2, 36);cout << b36 << endl;}




0 0