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

C语言实现十进制转换为二进制

程序员文章站 2022-07-15 10:55:16
...
/*
 * 文件名:二进制转换.c
 * 功能描述:把10进制数转换为二进制数
 * 编写人:王廷云
 * 编写日期:2017-1-10
*/
#include <stdio.h>

#define  NR (sizeof(int)*8)  // 二进制位的个数

void deciToBin(int num);	 // 十进制转换为二进制函数声明

/* 主函数 */
int main(void)
{
    int num;

    fprintf(stdout, "请输入一个正整数:");

    /* 获取并检查用户输入 */
    while (1)
    {
        if (fscanf(stdin, "%d", &num) != 1)
        {
            fprintf(stderr, "输入错误!请重新输入:");
            while (getchar() != '\n'); // 去掉多余的非法字符 
            continue;
        }
        else if (num < 0)             // 输入的数不能为负数
        {
            fprintf(stderr, "请输入错误!请输入正整数:");
            continue;
        }
        else
            break;
    }

    fprintf(stdout, "对应二进制为:");

#if 1 /* 方法一: 不使用递归 */
    char bitArr[NR];
    int i = -1;

    /* 算法:栈的数学模型 */
    do {
        i += 1;
        bitArr[i] = num % 2;
        num /= 2;
    } while (num != 0);

    /* 逆序打印 */
    for (i ; i >= 0; i--)
    {
        fprintf(stdout, "%d", bitArr[i]);
    }
    fputc('\n', stdout);

#else /* 方法二: 使用递归 */
    if (num == 0)
    {
        fprintf(stdout, "0\n");
    }
    else
    {
        deciToBin(num);       // 调用第归函数
        fputc('\n', stdout);
    }
#endif  
    
    return 0;
}

/*
 * @函数名:deciToBin
 * @函数功能:实现十进制转换为二进制
 * @参数:需要转换的十进制整数
*/
void deciToBin(int num)
{
    /* 第归结束条件 */
    if (num == 0)
    {
        return;
    }

    /* 第归调用 */
    deciToBin(num/2);

    /* 逆序打印 */
    fprintf(stdout, "%d", num%2);
}