【C语言】将十进制数转化为二进制并输出

十进制转化为二进制并输出(以整型为例)

首先需要明确十进制转为二进制的算法:将所需转化的数除以2,所得余数为k1,将所得商再除以2,所得余数为k2…...重复步骤直到商为0;读数时从最后一个余数读起,即kn,k(n-1)…k2,k1;所得数便是转化成的二进制数(除二取余法)
例如:将20转化为二进制数
20/2   商为10   余数为0   k1
10/2   商为5     余数为0   k2
5/2     商为2     余数为1   k3
2/2     商为1     余数为0   k4
1/2     商为0     余数为1   k5
故二进制数为:10100
 

编程思路:定义输入的函数为input,商为quotient,余数为remainder;则可以用一个数组result来存放每次计算后所得的余数,然后倒序输出

代码如下:

#include 
int main(void) {
    
    //提示用户输入数据
    int input = 0 ;
    printf("请输入一个数据:");
    scanf("%d", &input);
    
    //十进制转为二进制
    int quotient = input;
    int remainder = 0;
    int result [100];
    int  i = 0;
    
    while (quotient != 0) {
        remainder = quotient % 2;      //求余数
        result [i] = remainder;       //数组存放每次所得的余数
        i++;
        quotient = quotient / 2;     //求商
    }
    i--;      //while循环中多加了一次i,需要减去
    
    //倒序输出数组
    printf("转化成二进制为:");
    for ( ; i >= 0 ; --i) {
        printf("%d", result[i]);
    }
    printf("\n");
    return 0 ;
}

但是在这种情况中,由于不知道输入数据的大小,存在事先定义好的数组存放不下所有余数的情况。如果将所有余数化为一个具体的值,则更具有适应性,也方便输出

思路:定义输出的值为result, 可以发现result的个位等于k1,十位等于k2......定义time来记录result进位的次数,每进一次即time*10;则可以通过time*k来控制result的个十百千万....位

代码如下:

#include 
int main(void) {
    
    //提示用户输入数据
    int input;
    
    printf("请输入一个数据:");
    scanf("%d", &input);
    
    //将数字转成二进制
    int quotient = input;
    int remainder = 0;
    int result = 0;
    int time = 1;
    
    while (quotient != 0 ) {
        remainder = quotient % 2;       //求余数
        result += remainder * time;    //将余数化为一个具体的值
        quotient = quotient / 2;      //求商
        time *= 10;
    }

  //输出二进制数据
    printf("转化成二进制为:%d\n",result);
  
    return 0;
}

 

 

 

你可能感兴趣的:(c语言demo)