对于一个P进制,若想转换为Q进制,需要分为2步
- 将P进制数x转换为十进制 y
- 将十进制数y转换为Q进制 z
对于1,将P进制数x转换为十进制
一个十进制数y=, 可以写成y=
同样,如果P进制数x为,可以表示成x=,利用它结合十进制的加、乘法,用代码实现为:
#include<stdio.h>
int main()
{
int P,x; //将P进制转换为十进制
while(scanf("%d %d",&P,&x)!=EOF) //不断接受输入,并实时处理输出结果
{
int y=0,pro=1;
while(x!=0)
{
y=y+(x%10)*pro;
x=x/10;
pro=pro*P;
}
printf("%d",y);
}
return 0;
}
对于2,将十进制转换为Q进制z
采用除基取余法,即每次将待转换数除以进制Q,得到的余数作为低位存储,得到的商成为待转换数.....最后商为0时,将所有位从高到低输出就得到z
如将13转换位二进制数
13/2=6......1
6/2=3........0
3/2=1........1
1/2=0........1
余数从后往前输出,为1101
#include<stdio.h>
int main()
{
int z[50]={0},num=0;
int Q,y;
while(scanf("%d %d",&Q,&y)!=EOF)
{
do
{
z[num++]=y%Q;
y=y/Q;
}while(y!=0);
for(int i=num-1;i>=0;i--) //这里是num-1,num++是先执行再自增
{
printf("%d",z[i]);
}
}
return 0;
}
因此,将一个P进制转换为Q进制代码整合为:
#include<stdio.h>
int one(int P,int x)
{
int pro=1,y=0;
while(x!=0)
{
y=y+(x%10)*pro;
x=x/10;
pro=pro*P;
}
return y;
}
void two(int y,int Q)
{
int z[50]={0},num=0;
do
{
z[num++]=y%Q;
y=y/Q;
}while(y!=0);
for(int i=num-1;i>=0;i--) //这里是num-1,num++是先执行再自增
{
printf("%d",z[i]);
}
}
int main()
{
int P,Q,x=0;
while(scanf("%d %d %d",&P,&Q,&x)!=EOF)
{
int temp=0;
temp=one(P,x);
two(temp,Q);
}
return 0;
}
执行了一下,结果正确