十进制转八进制的一种思路
前言
我们先看本次分析的源代码
不得不承认,在没有人指导的情况下,我感觉但从代码出发思路还是比较难以琢磨出来的。想要搞出来还是要从单一案例出发,研究其中的数学逻辑,多演草,尽可能去寻找数与数之间的关系。
正文
先从代码分析
该代码主要分为两个部分
第一部分用来找出一个小于输入值的最大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来凑了。
后记
盘盘数学逻辑
起因
前言和正文都是2/20晚上写的,本来问题基本已经解决了。但是今天(2/21)中午睡午觉的时候,寝室有点吵没咋睡成,睡了10分钟左右就被干醒了,在意识有点模糊的时候想到了这个问题,我想着反正睡不着就在床上再想想这个问题,然后我就在半睡半醒的情况下把数学逻辑给盘出来了。于是我就直接起床写下来这份后记。
看看我当时思考的问题切入点:上面我们是通过对八进制转十进制的分析得出的思路,那么我开始好奇十进制转八进制与八进制转十进制在方法上有什么数理逻辑,为什么相互转换的方式不一样,为什么不一样但是是可以逆向转换的。
这个问题如果去网上搜应该会有教学视频,但我觉得我自己思考出来的结果也很宝贵,所以请听我讲讲我当时的分析。
分析
我们还是以115为例子看看两个式子
为什么十进制的余数可以作为答案呢?我们上面的程序是将除法结果依次输出,而正常运算是将除法余数依次输出。于是我结合正文中我提到的逆向分析思路做出下面的分析。
我们换个形式来看十进制转八进制的式子
那么现在我们对右边式子进行整合
然后将括号去掉,看看变成了什么
如果我们将这个式子进行翻转,那么就变成了我们八进制转十进制的式子了。
此时数理逻辑就清晰起来了
总结
我们对于十进制转八进制式子中的余数,不应该单单认为他是一个个位数,还要清楚它背后跟着隐藏的乘法。
比如115中的余数3、6、1,1的背后其实藏着两个8,因为他是在经过两次除8后进行第三次除8产生的余数,那么这也意味着它代表了前两次的8,如果进行逆推,那么它理应去乘两次8。其他分析同理。
__EOF__

本文链接:https://www.cnblogs.com/zaughtercode/p/17139372.html
关于博主:qq:1730119093 欢迎加我讨论
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异