数学问题:进制转换
程序员文章站
2022-07-12 22:19:25
...
文章目录
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;
}