除基取余法,就是将10进制(我们平常使用最广泛的数字),通过一连串的除法,转换成我们所需要的进制。例如将10进制转换为8进制,这里8就是"基"。
先举个除基取余法的栗子:将十进制数 13 转换为二进制。我们可以这么去计算:
13÷2=6……1
6÷2=3……0
3÷2=1……1
1÷2=0……1
注意,必须除到商为0,才算完成。从下到上排列起来就是1101,所以 十进制13=二进制1101。
那么如何用C语言实现呢?下面举了个栗子~
#include <stdio.h>
int main() {
int number , j , out[31]; //number为十进制数字,j为要转化的进制。out存放j进制数。因为要一位一位处理,所以out为数组
int i = 0; //i为处理次数,便于最后遍历数组。
scanf("%d %d",&number,&j); //输入待处理数字和进制
do{ //do循环
out[i++] = number % j; //令out数组依次存放待处理数字与进制的余数
number /= j; //number = number / j ,求商,用于下一轮继续求余
}while(number != 0); //直到商为0,停止循环
for(int m = i-1; m>=0; m--) //从高位到低位,遍历数组
printf("%d",out[m]); //依次输出数组内的数据
return 0;
}
附:如何将其他进制转换为10进制?
将p进制数(例如a1a2a3...an),从高到低依次乘以p的n-1次平方即可。程序如下:
int y = 0, product = 1;
while(X != 0) {
y = y + (x % 10) * product;
x = x / 10; //去掉x的个位
product *= P;
}