C语言利用“除基取余法”转化进制

发布于 / C语言 / Comments Off on C语言利用“除基取余法”转化进制

除基取余法,就是将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; 
}

转载原创文章请注明,转载自: 斐斐のBlog » C语言利用“除基取余法”转化进制
评论已关闭