c语言正整数N转换成一个二进制,C语言循环结构 -C语言十进制数转换为二进制数...

这是一个C语言 do while 循环示例:统计十进制正整数 n 转换为二进制数后,其二进制序列中包含的 1 和 0 的个数。

问题分析

输入:一个正整数。

输出:两个整数:1 的个数和 0 的个数。

将十进制数 n 转换成二进制数,一般采用“除 2 取余,倒序输出”的方法。

本题只是统计转换成的二进制数中 1 和 0 的个数,因而只要在“除 2 取余”的过程中不断判断并累计 1 和 0 的个数即可(见图 1)。

c语言正整数N转换成一个二进制,C语言循环结构 -C语言十进制数转换为二进制数..._第1张图片

图 1:循环执行“除 2 取余”统计 1 和 0 的个数

算法描述

c语言正整数N转换成一个二进制,C语言循环结构 -C语言十进制数转换为二进制数..._第2张图片

代码清单 1:统计十进制正整数 n 转换为二进制数后,其中包含的 1 和 0 的个数

#include

#include

int main( )

{

int n,s1=0,s0=0;

printf("输入一个正整数:\n");

scanf("%d",&n);

do

{

if(n % 2 == 1)

s1++; //余数为1,则s1加1

else

s0++; //余数为0,则s0加1

n /= 2; //n=n/2

}

while(n != 0); //非0,则重复“除2取余”转换

printf("二进制序列中1的个数是:%d\n",s1);

printf("二进制序列中0的个数是:%d\n",s0);

system("pause");

return 0;

}

运行结果:

输入一个正整数:

78

二进制序列中1的个数是:4

二进制序列中0的个数是:3

至于输出正整数 n 的二进制数序列,有很多方法,图 3 所示的就是其中一种。

c语言正整数N转换成一个二进制,C语言循环结构 -C语言十进制数转换为二进制数..._第3张图片

图 3:循环执行“除 2 取余”输出正整数 n 的二进制数序列

代码清单 2:输出十进制正整数 n 的二进制数序列

#include

#include

#include

int main( )

{

int n,i=0;

double D=0;

printf("输入一个正整数:\n");

scanf("%d",&n);

do{

if(n % 2 == 1) D += pow(10,i); //D = (n % 2) * pow(10,i)

n /= 2; //n = n / 2

i++; //i = i + 1

}while(n != 0); //非 0,则重复“除 2 取余”转换

printf("二进制数序列是:%.0lf\n",D);

system("pause");

return 0;

}

运行结果:

输入一个正整数:

78

二进制数序列是:1001110

你可能感兴趣的:(c语言正整数N转换成一个二进制)