【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;
}
上一篇: c语言输出二进制