前言
我们先看本次分析的源代码
不得不承认,在没有人指导的情况下,我感觉但从代码出发思路还是比较难以琢磨出来的。想要搞出来还是要从单一案例出发,研究其中的数学逻辑,多演草,尽可能去寻找数与数之间的关系。
正文
先从代码分析
该代码主要分为两个部分
第一部分用来找出一个小于输入值的最大8次方数
第二部分用通过依次输出单一数字(某一位上的数字)来组合出我们的答案
与正常计算方式对比
我们正常计算十进制转八进制问题时,我们的一般步骤是:将10进制数一直除8,取每次余数,最后将这些余数逆序组合得出答案。
其中的逆序组合是最关键的问题,我们可以通过存入数组中来实现,但是这个代码并不这样做,所以我们要重点分析他是怎么解决的。
分析八进制
我们以115来举例,正常计算结果如下
那么我们进行逆向分析,将这个八进制转换为十进制,看看会是一个什么过程
这里我们就可以发现端倪了:这个式子实际上就是3+48+64=115,我们从这个式子中也能发现,115实际就是64、8、0的组合。首先去找64得到1,然后去找8,然后去找3。我们对这个式子逆推是显然成立的,如果逆推的时候数值存在偏差,那么正向式子就显然不满足除到底的要求。
重审代码
所以,面对十进制转八进制问题,我们需要先找出那个小于输入值的最大8次方数(再大的那些数据显然放在式子里是乘0的),然后向小的方向求出其他8的次方数。对于115的情况就是先得出64,然后找到8。
先用64去除,拿他的结果。剩下的余数要靠更小的8的次方数去组成。这样一直进行到8结束,剩下的就交给1来凑了。
标签:115,64,次方,思路,八进制,十进制,式子 From: https://www.cnblogs.com/zaughtercode/p/17139372.html