欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数学问题:进制转换

程序员文章站 2022-07-12 22:19:25
...

文章目录

1 进制转换

10进制 <==> P进制

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

举例
p = 8:168 【10】= 82(2)+8(5)+(0)8^2*(2) + 8*(5) + (0) = 250【8】
p = 13: 129 【10】= 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;
}