纯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日

相关文章

  • 对python中数据集划分函数StratifiedShuffleSplit的使用详解

    对python中数据集划分函数StratifiedShuffleSplit的使用详解 StratifiedShuffleSplit是一个用于数据集划分的函数,它可以根据指定的标签(类别)进行分层随机划分。以下是使用StratifiedShuffleSplit函数的详细步骤: 导入必要的库和模块: from sklearn.model_selection im…

    other 2023年10月17日
    00
  • python3 遍历删除特定后缀名文件的方法

    当需要遍历删除特定后缀名的文件时,可以使用Python的os模块和shutil模块来完成。下面是一个完整的攻略,包含了两个示例说明。 首先,导入所需的模块: import os import shutil 然后,定义一个函数来遍历删除特定后缀名的文件: def delete_files_with_extension(folder_path, extensio…

    other 2023年8月5日
    00
  • Windows系统下Apache、PHP无法启动问题总结

    下面我会详细讲解“Windows系统下Apache、PHP无法启动问题总结”的完整攻略。 问题描述 在安装Apache、PHP后,在Windows系统下启动Apache服务器时,可能会遇到启动异常的情况,表现为Apache或PHP服务无法启动。具体的现象可以是: Apache服务无法启动; PHP代码无法执行; PHP代码报错等。 解决步骤 针对以上问题,我…

    other 2023年6月26日
    00
  • drf认证组件、权限组件、jwt认证、签发、jwt框架使用

    DRF(Django Rest Framework)是一个基于Django的Web API框架,它提供了许多有用的功能,包括认证组件、权限组件和JWT认证。本文将详细讲解DRF认证组件、权限组件、JWT认证、签发和JWT框架的使用方法,并提供两个示例说明。 DRF认证组件 DRF认证组件用于验证用户的身份。DRF提供了多种认证组件,包括基本认证、会话认证、T…

    other 2023年5月5日
    00
  • 细说集群技术(cluster)

    细说集群技术(cluster) 集群技术是一种将多个计算机联合起来协同工作的方式,以实现提高系统性能、提高可靠性、实现负载均衡等目标。在大型网站、云计算、大数据等领域中广泛应用。本文将介绍集群技术的基本概念、应用场景、以及实现方式。 集群技术的基本概念 集群技术是一种将多个计算机联合起来协同工作的方式。通过将多台计算机组合成一个更大的逻辑系统,从而达到分布式…

    其他 2023年3月28日
    00
  • idea 实现搜索jdk中的类和包操作

    实现搜索JDK中的类和包操作攻略 1. 确定搜索目标 首先,我们需要明确我们的搜索目标是在JDK中查找类和包。JDK(Java Development Kit)是Java开发工具包,其中包含了Java编程所需的类和工具。 2. 准备工作 在开始搜索之前,我们需要确保以下几个准备工作已完成:- 安装JDK:确保已经正确安装了JDK,并且配置了环境变量。- 设置…

    other 2023年9月7日
    00
  • 关于不懂Chromedriver如何配置环境变量问题解决方法

    关于不懂Chromedriver如何配置环境变量问题解决方法 什么是Chromedriver Chromedriver是一个用于连接Google Chrome浏览器的工具,可以在Python等编程语言中调用它,实现自动化测试等功能。 为什么要配置Chromedriver环境变量 在使用Selenium进行Python自动化测试的时候,我们需要用到Chrome…

    other 2023年6月27日
    00
  • ArrayList的自动扩充机制实例解析

    下面我将详细讲解 “ArrayList的自动扩充机制实例解析”的完整攻略。 什么是ArrayList ArrayList是一个动态数组,可以随时添加、删除和修改元素。它实现了List接口,继承了AbstractList抽象类。由于它可以自动扩充容量,因此通常比静态数组更加方便易用。 ArrayList的自动扩充机制 当ArrayList添加元素时,若发现容量…

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