纯C语言:递归二进制转十进制源码分享

下面是关于“纯C语言:递归二进制转十进制源码分享”的完整攻略:

1. 题目描述

编写一个函数,将二进制数转换成十进制数,要求使用C语言实现,同时使用递归方式。

2. 思路

二进制转换成十进制的方法:将二进制数按权展开,乘以对应权重,再将结果相加即可。例如:二进制1011转换成十进制,计算方法为:1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 11。

这个问题可以使用递归方式实现。具体思路如下:

  1. 从二进制数的最高位开始转换,计算第一位的权重,并将其与二进制数的第一位相乘。

  2. 将结果与去掉最高位的二进制数递归调用本函数,得到结果。

  3. 将上述结果与步骤一的结果相加,得到最终的十进制数。

  4. 若二进制数已经被转换成0,则返回0。

3. 代码实现

下面是完整的C语言代码实现,包含注释和示例:

#include <stdio.h>

// 定义递归函数
int binaryToDecimal(int n) {
    // 若n为0,直接返回0
    if (n == 0) {
        return 0;
    }
    // 定义变量,记录该位上的权值
    int weight = 1; 
    // 得到除最高位外的数字
    int remainder = n / 10; 
    // 计算当前位的权值
    while (remainder > 0) {
        weight *= 2;
        remainder /= 10;
    }
    // 计算当前位上的数字
    int result = (n % 10) * weight; 
    // 递归计算剩余二进制数的十进制值
    return result + binaryToDecimal(remainder);
}

int main() {
    // 测试用例1
    int num1 = 1101;
    int result1 = binaryToDecimal(num1);
    printf("二进制数 %d 转换成十进制数为 %d\n", num1, result1);
    // 测试用例2
    int num2 = 10101;
    int result2 = binaryToDecimal(num2);
    printf("二进制数 %d 转换成十进制数为 %d\n", num2, result2);
    return 0;
}

4. 示例说明

假设输入的二进制数为1101。

  1. 第一位的权重为2^3=8,将其与最后一位相乘,得到8 * 1 = 8。

  2. 将n除以10,得到11,再递归调用本函数计算其余位的十进制值。

  3. 在递归的过程中,当n变成0时,直接返回0。

  4. 将计算得到的结果相加,得到最终的十进制数。因此,1101二进制数转换成十进制数为8 + 0 + 4 + 1 = 13。

再假设输入的二进制数为10101。

  1. 第一位的权重为2^4=16,将其与最后一位相乘,得到16 * 1 = 16。

  2. 将n除以10,得到101,再递归调用本函数计算其余位的十进制值。

  3. 在递归的过程中,当n变成0时,直接返回0。

  4. 将计算得到的结果相加,得到最终的十进制数。因此,10101二进制数转换成十进制数为16 + 0 + 4 + 0 + 1 = 21。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯C语言:递归二进制转十进制源码分享 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 详解java封装返回结果与RestControllerAdvice注解

    下面是详解java封装返回结果与RestControllerAdvice注解的完整攻略: 1. 什么是封装返回结果? 在Web开发中,我们经常需要向用户返回数据,例如:查询结果、错误信息、操作成功等等。但是,直接返回结果有时候不太灵活,可能会导致一些问题,例如:字段暴露、无法扩展、难以维护等等。为了解决这些问题,我们可以使用封装返回结果的方式来实现。即:在返…

    other 2023年6月25日
    00
  • 关于配置:pgadmin4:无法联系postgresql应用程序服务器

    以下是关于配置pgAdmin4时遇到无法联系PostgreSQL应用程序服务器的完整攻略,包含两个示例。 关于配置pgAdmin时遇到无法联系PostgreSQL应用服务器的攻略 在配置Admin4时,有时候会遇到无法Post应用程序的问题。以下是两个示例: 1. 检查PostgreSQL服务器是否正在行 首先,我们需要检查PostgreSQL服务器是否正在…

    other 2023年5月9日
    00
  • Element中el-input密码输入框浏览器自动填充账号密码问题的解决方法

    当使用Element的<el-input>组件创建密码输入框时,会遇到浏览器自动填充账号密码的问题。这个问题可能会影响页面的安全性,同时给用户带来不便。本文将详细讲解如何解决这个问题。 问题的产生 浏览器在填充表单的时候,会检测该表单是否具有自动填充的特性。在密码输入框中,如果同时存在一个隐藏的<input>元素,并且该元素的名称为u…

    other 2023年6月27日
    00
  • Win10系统自动重启怎么办 Win10系统自动重启的关闭方法

    Win10系统自动重启怎么办? 1. 关闭自动重启 Win10系统的自动重启是由“Windows更新”功能触发的。我们可以通过以下方法来关闭自动重启: 打开“设置”应用程序 点击“更新和安全” 点击“Windows更新” 点击“高级选项” 在“选择何时安装更新”下拉菜单中选择“通知我重启计算机” 关闭“自动安装更新”开关 这样,当系统更新需要重启时,系统就会…

    other 2023年6月26日
    00
  • Python Selenium 之数据驱动测试的实现

    当然,下面是关于Python Selenium数据驱动测试的实现的完整攻略,包含两个示例说明: 数据驱动测试的实现步骤 导入所需的库和模块: import unittest from selenium import webdriver from ddt import ddt, data, unpack 创建测试类并使用@ddt装饰器标记: @ddt clas…

    other 2023年10月17日
    00
  • Java开启JMX远程监控服务配置

    下面是“Java开启JMX远程监控服务配置”的完整攻略。 什么是JMX? Java管理扩展(Java Management Extensions,JMX)是Java平台上的一套管理和监控概念的规范。在Java应用程序中启用JMX后,可以监控运行时状态、配置和性能等。 开启JMX远程监控服务配置步骤 以下是Java开启JMX远程监控服务配置的步骤: 1. 添加…

    other 2023年6月27日
    00
  • 关于dll:如何在gcc中链接到libatomic库

    关于dll:如何在gcc中链接到libatomic库 在GCC中,可以使用libatomic库来实现原子操作。本攻略将介绍如何在GCC中链接到libatomic库,并使用动态链接库(DLL)来实现。以下是关于如何在GCC中链接到lib库的完整攻略: 1. 确认是否需要链接libatomic库 在使用GCC编译程序时,如果使用了原子操作,那么就需要链接到lib…

    other 2023年5月8日
    00
  • vue动画与组件

    Vue动画与组件攻略 Vue是一种流行的JavaScript框架,它提供了许多功能,包括动画和组件。本攻略将介绍Vue动画和组件的用法,并提供两个示例。 Vue动画 Vue动画是一种用于创建动态效果的技术。Vue动画可以用于添加过渡效果、动画效果和交互效果。Vue动画可以通过CSS过渡、CSS动画和JavaScript动画来实现。 CSS过渡 CSS过渡是一…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部