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