欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-01 13:33:26
...

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

首先需要明确十进制转为二进制的算法:将所需转化的数除以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 <stdio.h>
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 <stdio.h>
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;
}