C语言求10进制转2进制(除2取余法)

发布于:2024-07-09 ⋅ 阅读:(226) ⋅ 点赞:(0)

1.思路:除2取余法,也就是说用除以2取余来将10进制数转换为二进制

2.两种代码实现,这里用了两,一个递归一个非递归。

  递归是一种编程技术,其中一个函数直接或间接地调用自己。递归通常用于解决那些可以被分解为更小的、相同类型的子问题的问题。

  递归函数必须满足两个基本条件:

  1. 基本情况(Base Case):这是递归结束的条件,通常是一个简单的问题,可以直接解决而不需要进一步的递归调用。
  2. 递归步骤(Recursive Step):这是函数调用自己的部分,它将问题分解成更小的子问题。

  递归的工作原理可以类比为数学中的等比数列求和,或者像是一个俄罗斯套娃,每个问题都包含了一个更小的问题,直到达到基本情况。

3.代码实现

(1)递归:这里定义了一个printBinary函数,它递归地将输入的10进制数除以2并打印出余数,直到10进制数变为0。在main函数中,程序会提示用户输入一个10进制数,然后调用printBinary函数来打印出对应的二进制表示。

#include "stdio.h"

// 函数用于打印二进制表示:除2取余
void printBinary(int decimal) {
    if (decimal > 0) {
        printBinary(decimal / 2);
        printf("%d", decimal % 2);
    }
}

int main() {
    int decimal;
    printf("请输入一个10进制数: ");
    scanf("%d", &decimal);

    if (decimal < 0) {
        printf("负数的二进制表示不是标准的,这里错误!请重输!\n");
    } else {
        printf("该10进制数的二进制表示为: ");
        printBinary(decimal);
        printf("\n");
    }

    return 0;
}

(2)非递归:这个程序首先检查输入的数是否为负数,如果是,打印负号并取其绝对值。然后使用一个循环来不断地将10进制数除以2并取余数,将余数作为二进制的最低位,然后乘以10的相应次方,累加到binary变量中。循环继续直到10进制数变为0。最后,打印出得到的二进制数。

#include "stdio.h"
#include "math.h"//pow()

int main() {
    int decimal, binary = 0, remainder, i = 0;
    printf("请输入一个10进制数: ");
    scanf("%d", &decimal);

    // 处理负数
    if (decimal < 0) {
        printf("-");
        decimal = -decimal; // 取其绝对值
    }

    // 循环直到decimal为0
    while (decimal > 0) {
        remainder = decimal % 2;
        binary = binary + (remainder * (int)pow(10, i));
        decimal = decimal / 2;
        i++;
    }

    printf("该10进制数的二进制表示为: %d\n", binary);

    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到