數學問題:進制轉換

文章目錄

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章