下面是关于“纯C语言:递归二进制转十进制源码分享”的完整攻略:
1. 题目描述
编写一个函数,将二进制数转换成十进制数,要求使用C语言实现,同时使用递归方式。
2. 思路
二进制转换成十进制的方法:将二进制数按权展开,乘以对应权重,再将结果相加即可。例如:二进制1011转换成十进制,计算方法为:1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 11。
这个问题可以使用递归方式实现。具体思路如下:
-
从二进制数的最高位开始转换,计算第一位的权重,并将其与二进制数的第一位相乘。
-
将结果与去掉最高位的二进制数递归调用本函数,得到结果。
-
将上述结果与步骤一的结果相加,得到最终的十进制数。
-
若二进制数已经被转换成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。
-
第一位的权重为2^3=8,将其与最后一位相乘,得到8 * 1 = 8。
-
将n除以10,得到11,再递归调用本函数计算其余位的十进制值。
-
在递归的过程中,当n变成0时,直接返回0。
-
将计算得到的结果相加,得到最终的十进制数。因此,1101二进制数转换成十进制数为8 + 0 + 4 + 1 = 13。
再假设输入的二进制数为10101。
-
第一位的权重为2^4=16,将其与最后一位相乘,得到16 * 1 = 16。
-
将n除以10,得到101,再递归调用本函数计算其余位的十进制值。
-
在递归的过程中,当n变成0时,直接返回0。
-
将计算得到的结果相加,得到最终的十进制数。因此,10101二进制数转换成十进制数为16 + 0 + 4 + 0 + 1 = 21。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯C语言:递归二进制转十进制源码分享 - Python技术站