目录
一.x进制转10进制
我们都知道10进制的1、10、100......分别是10的0次方、10的1次方、10的2次方......
当然,其他进制中也有这种关系:
如二进制中的1、2、4......分别是2的0次方、2的1次方、2的2次方......
而原数每一位上的数乘以对应的进制的次方,最后将所有位得到的结果相加,最终的结果就是他的10进制数
举几个例(从个位开始计算,倒着乘,括号里面的是进制):
1.1011(2)==11(10)
2.2C(16)==44(10)
所以,程序如下:
#include<iostream>
using namespace std;
int xToTen(string str,int x){
int yuanShu[str.length()],w=1;//w就是每个位对应的进制的次方,一开始是x的0次方,也就是1
int jieGuo=0;
for(int i=0;i<str.length();i++){//char转int
if(str[i]>='0'&&str[i]<='9')yuanShu[i]=str[i]-'0';//数字
else yuanShu[i]=str[i]-'A'+10;//字母
}
for(int i=str.length()-1;i>=0;i--){//从个位乘起
jieGuo+=yuanShu[i]*w;
w*=x;//次方加一,再乘个x
}
return jieGuo;
}
int main(){
int x;//进制
string str;//x进制数
cin>>x>>str;
cout<<xToTen(str,x);
}
运行结果:
二.10进制转x进制
10进制转x进制就好办多了,直接短除法!
下面举两个例子:
1.100转2进制
2.200转16进制
可以发现,最后一步的商都是0,所以可以以商等于0来作为结束标志
由于计算后会出现>10的余数(如12),就要将其转换为字母(如C),这时葵花宝典就很好用:
string dictionary="0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
代码如下:
#include<iostream>
using namespace std;
string dictionary="0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";//葵花宝典
string tenToX(int n,int x){
string jieGuo="",temp="";
for(int i=0;i<30;i++)jieGuo[i]='\0';//初始化
while(n!=0){
temp+=dictionary[n%x];//通过葵花宝典确定余数的字符
n/=x;
}
for(int i=temp.length()-1;i>=0;i--){//反转字符串
jieGuo+=temp[i];
}
return jieGuo;
}
int main(){
int n,x;//n为10进制数,x为要转换的进制
cin>>n>>x;
cout<<tenToX(n,x);
}
三.x进制转k进制
有了前两步打基础,这一步就非常简单啦。只需要将x进制转换为10进制,再将10进制转换为k进制即可(当然还有其他方法,不过这个方法更简单)
程序如下,就不写注释啦:
#include<iostream>
using namespace std;
string dictionary="0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
string tenToX(int n,int x){
string jieGuo="",temp="";
for(int i=0;i<30;i++)jieGuo[i]='\0';
while(n!=0){
temp+=dictionary[n%x];
n/=x;
}
for(int i=temp.length()-1;i>=0;i--){
jieGuo+=temp[i];
}
return jieGuo;
}
int xToTen(string str,int x){
int yuanShu[str.length()],w=1;
int jieGuo=0;
for(int i=0;i<str.length();i++){
if(str[i]>='0'&&str[i]<='9')yuanShu[i]=str[i]-'0';
else yuanShu[i]=str[i]-'A'+10;
}
for(int i=str.length()-1;i>=0;i--){
jieGuo+=yuanShu[i]*w;
w*=x;
}
return jieGuo;
}
int main(){
string str;
int x,k;
cout<<"需要转换的数及其的进制:";
cin>>str>>x;
cout<<"需要转换的进制:";
cin>>k;
int ten=xToTen(str,x);
cout<<tenToX(ten,k);
}
运行结果:
如有疑问欢迎私信或评论区留言!