有一个p进制的数,如果要转化为Q进制,我们该怎么转化呢?
显然我们解题分两步,第一是如何实现从p进制到10进制,第二则是从10进制到q进制。实现了这两步,我们的这道题也就迎刃而解了。
进制数的含义,如何实现从p到10的转化
在开始之前,我要知道,每一个进制数的含义是什么。比如说10进制数123,他的组成是什么呢?很显然,是。那么二进制的110表示十进制的什么数呢?显然,它的表示是。现在看出来了吗?对于任意一个p进制的数x(x为a1,a2,……an),我们都可以用类似的方法进行转化。那就是先取出该数x各个位置的数,再乘以对应的,再把结果相加,就能实现从p进制到10进制的转化。
如何实现从10到q的转化?‘除基取余法’
除基取余法,所谓的‘基’,就是我们要转换的q进制的q,方法是10进制的数除以q,每次得到的余数作为低位存储,我们的结果若不是0,则再进行下一次的除基,直到结果为0。
具体的实现原理大家可以自己体会,接下来是实现代码:
#include<stdio.h>
int main()
{
printf("本代码将实现p进制转换为q进制的进制转换功能,现在请输入p,q\n");
int p, q;
scanf("%d%d", &p, &q);
printf("%d进制的数为:\n", p);
int x;
scanf("%d", &x);
int y=0;
int z=0,m=1;
while (x != 0) {
z = x % 10;
x =x / 10;
y =y+ z * m;
m *= p;
}
//printf("y=%d,x=%d", y,x);
int a[31];
int num = 0;
do {
a[num++] = y % q;
y /= q;
} while (y != 0);
printf("%d进制的数为:", q);
for (int i = num-1; i >= 0; i--) {
printf("%d", a[i]);
}
}