二进制十进制转换史上最牛逼算法!!

十进制转二进制

相信学过计算机的同学一定对二进制不陌生,计算机底层的通讯就是二进制嘛!二进制由0和1组成,那么怎么快速的对一个十进制数转换成二进制数呢?

最古老的方法大家还记得怎么转换吗?比如35这个十进制数?

将这个数除以2,等于17余1,然后将17再除以2,等于8余1…直到不能再被2整除,然后将余数从后往前的顺序写出来就是二进制数100011。

这个是我们上初中时候老师教的,但是太麻烦了,下面我教大家一种新的算法:

学习这个新算法的时候我们首先要了解下 2 n 2^n 2n问题:

2 8 2^8 28 2 7 2^7 27 2 6 2^6 26 2 5 2^5 25 2 4 2^4 24 2 3 2^3 23 2 2 2^2 22 2 1 2^1 21 2 0 2^0 20

…256、128、64、32、16、8、4、2、1

第一步,我们先把 2 n 2^n 2n倒着写出来,写多少呢?根据你要算的这个十进制数的大小,比如35,那你就从32开始往前写就行了:

32、16、8、4、2、1

从上面这些数里,我们想算十进制的35,它等于32+2+1,那我就在32、2、1下面标1,其余的标0:

通过上图,二进制就是100011。简单不?如果你看懂了,你就试试其他的数吧。

二进制转十进制

十进制转二进制我们刚才学会了,那么二进制怎么转十进制呢?是不是有点懵?

假如有一个二进制数100011,怎么转换呢,非常简单!还是先把 2 n 2^n 2n写下来,写多少?根据二进制的位数,100011是6位,那我就从后往前数6位写下来:

然后把这个二进制数从前往后依次写在十进制数上:

最后把上标为1的加在一起:

32 + 2 + 1 = 35

是不是很简单?只要你记住这几个数( 2 n 2^n 2n)你就可以快速的十进制二进制互转。那有的同学问了,如果十进制数是999999999转换二进制是多少?呵呵哒!这么大的数你用计算器!你知道怎么算就行了,有计算器呢

### 牛客网华为机试算法题目解析 #### 题目一:矩阵链相乘优化 在处理矩阵链相乘问题时,可以通过动态规划来减少不必要的计算量。例如,在给定三个矩阵 A(10×30), B(30×5), 和 C(5×60),可以按照两种方式计算 (AB)C 或者 A(BC)[^1]。前者的计算复杂度为 \(10 \times 30 \times 5 + 10 \times 5 \times 60 = 4500\) 次乘法操作;而后者则需要 \(30 \times 5 \times 60 + 10 \times 30 \times 60 = 27000\) 次乘法操作。因此选择合适的括号位置能够显著降低运算成本。 #### 题目二:统计字符串中的特定字符数量 对于统计某个子串在母串中出现次数的问题,可以直接利用 Python 的内置 `count` 方法完成此任务。下面是一个简单的实现例子: ```python str1 = input() str2 = input() print(str1.lower().count(str2.lower())) ``` 上述代码片段展示了如何忽略大小写差异并计数指定字符或子串在整个输入字符串内的存在频率[^2]。 #### 题目三:十六进制十进制整型数值 当涉及到不同基数之间的转换时,标准库提供了便捷的方法来进行此类变换。比如使用 C++ 中的 `std::stoi` 函数可以从字符串形式读取数据,并将其解释成相应类型的值。这里提供了一个基于该技术的小程序用于演示目的: ```cpp #include <iostream> using namespace std; int main(){ string str; cin >> str; cout << stoi(str, nullptr, 16) << endl; } ``` 这段源码实现了从用户那里接收一个表示十六进制数字的字符串作为输入参数,接着输出对应的十进制表现形式的结果[^3]。 #### 题目四:二十四点游戏逻辑设计 后考虑这样一个经典益智类小游戏——即所谓的“二十四点”。它的基本规则是从一副扑克牌里随机抽取四张卡片(假设它们上面标记有介于1到9之间任意正整数),玩家尝试运用加减乘除四种基础算术运算符以及必要的圆括号改变优先级关系使得终表达式的求值得恰好等于24即可获胜[^4]。 以下是解决这个问题的一种可能策略框架: - 枚举所有可能的操作序列; - 对每种情况应用递归回溯搜索找到满足条件的一组解决方案之一。 虽然具体编码细节超出了当前讨论范围之外,但是理解这些概念有助于构建实际应用程序版本的基础架构。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoungJ5788

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值