文章目錄
1 進制轉換
10進制 <==> P進制
- P<=10:0~9
- p>10:0~9,A,B,C…
舉例
p = 8:168 【10】= = 250【8】
p = 13: 129 【10】= = 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;
}