炫意html5
最早CSS3和HTML5移动技术网站之一

C语言循环结构 -C语言十进制数转换为二进制数

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

问题分析

输入:一个正整数。

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

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

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

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

算法描述

N-S图描述

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

#include <stdio.h>
#include <stdlib.h>
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 所示的就是其中一种。

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

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
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

炫意HTML5 » C语言循环结构 -C语言十进制数转换为二进制数

Java基础教程Android基础教程