进制转换

    技术2022-07-13  74

    文章目录

    模板举例

    模板

    // 10进制转为d进制:n转为arr vector<int> vect; //arr[0]为低位 while(n!=0){ vect.push_back(n%d); // 先存n的低位 n = n/d; } // d进制转为10进制:vect转为n n=0; for(int i=vect.size()-1; i>=0; i--){ //从d进制高位开始 n = n*d + vect[i]; }

    举例

    10进制 <==> P进制

    P<=10:0~9p>10:0~9,A,B,C…

    举例 p = 8:168 【10】= 8 2 ∗ ( 2 ) + 8 ∗ ( 5 ) + ( 0 ) 8^2*(2) + 8*(5) + (0) 82(2)+8(5)+(0) = 250【8】 p = 13: 129 【10】= 8 ∗ ( 9 ) + ( 12 ) 8*(9) + (12) 8(9)+(12) = 9C【13】

    #include<cstdio> #include<string> using namespace std; string base[16] = {"zero","one","two","three","four", "five","six","seven","eight","nine","A","B","C","D","E","F"}; string strs[20]; //假设P进制最多20位 int k; // P进制实际k位 // 168【10】 = 8*(9) + (12) = nine C【13】 // k位p进制 ==> 10进制 int index_base(string s){ for(int i=0; i<16; i++){ if(base[i]==s){ return i; } } } int p_to_ten(int p){ int n=0, temp=1; for(int i=k-1; i>=0; i--){ // 倒读 //str_p[i]转为数字:映射base下标 int t = index_base(strs[i]); // n += (t*temp); temp *= p; } return n; } // 10进制 ==> k位p进制 void ten_to_p(int n, int p){ int i=0; while(n!=0){ strs[i] = base[n%p]; n = n/p; i++; } k = i; } int main(){ //13进制 转 10进制 strs[0] = "nine"; strs[1] = "C"; k = 2; printf("%d\n",p_to_ten(13)); //10进制 转 13进制 ten_to_p(129, 13); for(int i=k-1; i>=0; i--){ //因为strs倒存,要逆序输出 printf("%s ", strs[i].c_str()); } return 0; }
    Processed: 0.014, SQL: 10