对于in进制转换成out进制,一般我们都会先转换成10进制,因为使用十进制能更好的转换成其他进制,所以第一步我们需要把in进制的数转换成10进制,这里使用的是海伦秦九韶算法;
具体原理为:
我也没学过其他算法,总之这个算法实现形式就很符合编程思想,我们也可以很轻松把in进制下的数的十进制给算出来,上述使用的是2进制,大家也可以改为其他进制,同时乘的时候也要把进制数改变即可;
接下来要把十进制数改变成我们需要的进制,这里使用的是短除法,具体实现如下:
这是短除法,可以实现十进制的数向其他任意进制转换,上述展示的是二进制,大家也可以转换成其他进制,记住mod 2和/ 2也要相应的改变成你要计算的进制;
代码如下:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;//数据开得大一点,使用longlong
int in,out;
string arr;//输入的数字,进制是in进制,需要转换成out进制
void init()
{
cout<<"请问您输入的是几进制?:";
cin>>in;
cout<<endl;
cout<<"请问您想要的是几进制?:";
cin>>out;
cout<<endl;
cout<<"请输入您要转换的数:";
cin>>arr;
}
LL zh(string arr)
{
LL k=0;
for(int i=0;i<arr.size();i++)//这里采用的是最常见的海伦秦九韶算法
{
LL p=0;
if(arr[i]<='9') p=arr[i]-'0';
else p=arr[i]-'A'+10;
k=k*in+p;
}
return k;//将输入的数字以十进制返回给is
}
string sizh(LL k)
{
string p;
while(k!=0)//常见的转换使用的是短除法
{
int l=k%out;
k/=out;
if(l<=9) p+=('0'+l);
else p+=('A'+l-10);
}
reverse(p.begin(),p.end());//记得要反转一下
return p;//直接返回
}
int main()
{
init();
LL is=zh(arr);//首先把arr转换成10进制,使用的是zh函数
string ss=sizh(is);//接下来把我们is转化成需要的进制,使用的是sizh函数
cout<<ss<<endl;//输出
}
这里有一道2022年蓝桥杯题目,也是进制转换类型:http://t.csdn.cn/yJ1sX
第三道题目,大家可以学习一下