进制转化很多地方都会用到,所以我在这里做个小总结,仅供大家参考,如有不到位之处请谅解。
10进制转换为b进制
短除法
char get(int x)//数字转换为字母
{
if(x<=9)return x+'0';
return x-10+'A';
}
string base10tob(int n,int b)//10进制转换为b进制
{
string num;
while(n)
{
num+=get(n%b);
n=n/b;
}
reverse(num.begin(),num.end());
return num;
}
另一种递归思路:
#include<iostream>
using namespace std;
string result;
char get(int x)//数字转换为字母
{
if (x <= 9)return x + '0';
return x - 10 + 'A';
}
void base10tob(int n, int b)//10进制转换为b进制
{
if (!n) { return; }
base10tob(n / b, b);
result += get(n % b);
}
int main()
{
base10tob(5, 2);
cout << result;
return 0;
}
X进制转为10进制
秦九韶算法
此图来源于AcSwing
int uget(char c)//b进制转换为10进制
{
if(c<='9')return c-'0';
return c-'A'+10;
}
int basebto10(string num,int b)//b进制转换为10进制
{
int res=0;
for(auto c:num)
res=res*b+uget(c);
return res;
}
a进制转换为b进制
用10进制过渡
string baseatob(string n,int a,int b)
{
int temp=basebto10(n,a);
return base(temp,b);
}