目录
1、缘起
2、算法描述
3、代码清单
4、相关知识点
5、总结
1、缘起
我以前计算二进制转换为十进制的时候,喜欢用笔算,或者电脑在手旁的时候,用电脑自带的程序员计算器进行计算。今天兴起,突然想写一个代码用于计算二进制转换为十进制,不写不知道,一写吓一跳。本来想着这个算法挺简单的,但真正去上手撸代码的时候,却发现事情没有想象的那么简单。
各位读者,你们先不要看下文,自己先去构思这个算法应该怎么实现,然后再去手撸一下代码,有困惑的时候再来看看本文,你会发现本文的精妙所在。一定要经过大脑的思考,不然看了也是白搭。
2、算法描述
程序首先提示用户输入一个二进制数,然后使用 while 循环 将其转换为十进制数。在循环中,程序使用 模运算符(%)和 除法运算符(/)来 获得二进制数的每个数字,并使用 pow 函数 计算每个数字所代表的十进制数值。最后,程序将这些值相加,得到二进制数的十进制等价。最后,程序打印出十进制数的值。
注意:在输入二进制数之前,请确保使用的是 long long 类型,以防止二进制数太大而导致溢出。
3、代码清单
#include <stdio.h>
#include <math.h>
int main()
{
//声明一个二进制数变量,用于存储用户输入的二进制数。
long long binary_number;
//定义一个十进制数变量,用于存储转换后的十进制数
int decimal_number = 0;
//声明一个余数变量,用于存储每次计算二进制数的余数
int remainder;
//定义一个自增变量,用于记录当前位数的值
int i = 0;
printf("请输入一个二进制数:");
scanf("%lld", &binary_number);
while (binary_number != 0)
{
//获得二进制的每位数字
remainder = binary_number % 10;
binary_number = binary_number / 10;
//计算每个数字所代表的十进制数值,最后,程序将这些值相加
decimal_number += remainder * pow(2, i);
i++;
}
printf("转换为十进制数为:%d\n", decimal_number);
system("pause");
return 0;
}
关键代码解释:
这是一个 while 循环,它会 一位一位地处理二进制数,直到将整个二进制数转换成十进制数。循环中的过程如下:
- 通过 取余运算 获得二进制数的最低位数字,并将其存储到
remainder
变量中。 - 将 二进制数除以 10,去掉最低位数字。
- 通过
remainder
和i
计算出当前位数所代表的十进制数值,并将其加到decimal_number
变量中。 - 将
i
变量加 1,以处理下一位数字。
循环重复执行以上过程,直到 binary_number
变量的值变成 0。
4、相关知识点
在 C 语言中,pow() 函数 用于 计算一个数的幂。它接受两个参数,第一个参数是 底数,第二个参数是 指数,返回值是 底数的指数次幂。
double pow(double x, double y);
- 其中,
x
是底数,y
是指数,返回值是x
的y
次幂。
例如,要计算 2 的 3 次幂,可以这样写:
#include <stdio.h>
#include <math.h>
int main()
{
double result = pow(2, 3);
printf("2 raised to the power of 3 is: %f\n", result);
return 0;
}
需要注意的是,pow()
函数的返回值类型是 double
,如果想要计算整数次幂,可以将指数转换为 double
类型进行计算。此外,在计算浮点数次幂时,可能会出现精度问题,需要注意。
5、总结
上述代码用了一个非常巧妙的思想,我直呼大为震惊。计算机把输入的值当做十进制来处理,然后对其 取余 和 取除 操作,取出其中的每一位数值,然后 一位一位地处理 "二进制数"(其实是 0 和 1 这样的十进制数)。将其取出的每一位数值乘以二进制相对应位置的 权重,得到每位二进制所对应的十进制,然后将其每位二进制所对应的十进制进行相加,得到一串二进制数的十进制数。
本期的分享总结就到这里了,如果有疑问的小伙伴,我们评论区交流嗷,笔者必回,我们下期再见啦 !