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

yizhihongxing

下面是关于“纯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日

相关文章

  • DedeCMS 5 .7 自定义表单制作和调用办法[图文]

    DedeCMS 5.7 自定义表单制作和调用办法 DedeCMS是一款开源的内容管理系统,可以实现网站的内容管理、发布和展示等功能。在使用过程中,用户可能需要制作自定义表单,以收集特定数据。这里将为大家介绍DedeCMS 5.7版本下,如何制作自定义表单以及调用方法。 制作自定义表单 1. 登录后台 首先,用户需要用管理员账号登录DedeCMS的后台管理页面…

    other 2023年6月25日
    00
  • vs怎么拖动控件到窗口? Visual Studio进行拖控件编程的技巧

    在Visual Studio中进行拖控件编程,可分为以下几个步骤: 1. 打开窗口设计器 在Visual Studio中,我们可以使用窗口设计器来进行拖控件编程。首先需要打开窗口设计器,在Solution Explorer中找到目标窗口的.cs文件,双击打开,或者在设计器中找到目标窗口并双击打开。 2. 打开工具箱 在Visual Studio的左侧有一个工…

    other 2023年6月27日
    00
  • C++运算符重载三种形式(成员函数,友元函数,普通函数)详解

    下面是“C++运算符重载三种形式(成员函数,友元函数,普通函数)详解的完整攻略”的详细讲解,包括基本原理、实现方法和两个示例说明。 基本原理 C++中的运算符重载是指在类中重新定义运算符的含义。C++中的运算符可以重载为成员函数、友元函数和普通函数三种形式。成员函数重载运算符是指将运算符重载为类的成员函数,友元函数重载运算符是指将运算符重载为类的友元函数,普…

    other 2023年5月5日
    00
  • GO语言运行环境下载、安装、配置图文教程

    GO语言运行环境下载、安装、配置图文教程 下载GO语言安装包 首先访问官方网站https://golang.org/dl/,找到对应的GO语言安装包并下载,根据自己的操作系统选择相应的版本。 安装GO语言 Windows 下载GO语言安装包go*.msi,双击运行,然后按照指导完成GO语言的安装,最后单击“Finish”按钮。 macOS 下载GO语言安装包…

    other 2023年6月27日
    00
  • HQL常用的查询语句

    HQL常用的查询语句 HQL(Hibernate Query Language)是Hibernate框架中用于查询数据的一种语言,类似于SQL。在HQL中,查询语句是面向对象的,使用Java类名及属性名代替SQL中的表名和列名,能够方便地进行对象导航和属性过滤。在本文中,我们将介绍HQL中常用的查询语句。 1. from语句 from Entity from…

    其他 2023年3月28日
    00
  • Java实现单向链表反转

    Java实现单向链表反转 1. 题目描述 给你一个单向链表的头节点,将这个链表反转。 例如:原链表为 1 –> 2 –> 3 –> 4,则反转后的链表为 4 –> 3 –> 2 –> 1。 2. 算法思路 我们可以让当前节点的 next 指针指向它前面的节点,由于单向链表没有指向前驱结点的指针,因此我们需要事先…

    other 2023年6月27日
    00
  • 如何将C语言代码转换为应用程序(也就是编译)

    将C语言代码转换为应用程序的过程,是通过编译器将源代码翻译并转化为二进制文件的过程。 以下是将C语言代码转换为应用程序的完整攻略: 安装编译器:首先需要先安装C语言的编译器,常用的编译器有gcc、clang等。以gcc为例,在Linux系统下执行以下命令安装gcc: sudo apt-get install gcc 编写C语言代码:在电脑上编写C语言代码,需…

    other 2023年6月25日
    00
  • C# 窗体(登录界面)

    概述 在C#中,我们可以使用窗体来创建用户界面。本文将为您提供一份完整攻略,介绍如何创建一个登录界面,并提供两个示例说明。 创建C#窗体登录界面的步骤 步骤1:创建新项目 在创建C#窗体登录界面之前,我们需要先创建一个新项目。可以使用以下步骤来创建新项目: 打开Visual Studio。 选择“File”菜单,然后选择“New”选项。 在“New Proj…

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