回 帖 发 新 帖 刷新版面

主题:各位专家,谁会做进制数问题?

(1)将二进制数转换为n进制数。
(2)将n进制数转换为十进制数。

回复列表 (共4个回复)

沙发

自己去翻翻基础教材,看看进制的实现原理,根据原理想一想该怎样用代码实现.

板凳

同意。

进制转换程序不难,难是难在你到底理解到各种进制之间的联系没,
比如2进制转10进制的通用数学方法如下:
110010(二进) = 1*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0    =  50(十进)

3 楼

HOHO,正好,我刚做了个任意进制(2→36)之间转换的工具。
是用字符串处理数据的,所以不限制输入的数的长度。
把原理发给你吧,不过最后一点是我自己思考出来的,也许不正确,因为我水平有限。
下面的是我对那个程序的注释



'关于进制转换的小知识
'为了让所有人都能看懂,我先把我了解的进制转换的知识介绍一下,然后大家再看下面的代码实现,也许会更容易理解我的思路
'1.把r进制转换成十进制,只要把r进制写成的各个幂的和的形式.
'然后按十进制计算结果,(这里r是大于1的自然数)
'例如,(205.21)8=2*8*8+0*8+5*1(8的0次)+2/8(8的-1次)+1/(8*8)(8的-2次)=(133.265625)10

'2.把十进制转换成r进制,可以把十进制转化成r的各次幂(各次幂的系数小于r而大于或等于0的整数)的和,
'从最高次幂起各次幂的系数就是依次是r进数从左到右各个数位上的数字
'①当十进制是整数时,采用"r除取余"法.即用数r除十进整数.取它的每次余数.
'例如,把(746)10化为一个八进制的数(1352)8.
'8|746
'  ---
' 8|93 ……2 (余数2就是8的0次方的系数)
'   --
' 8|11 ……5 (余数5就是8的1次方的系数)
'   --
'  8|1 ……3 (余数3就是8的2次方的系数)
'    -
'   |0 ……1 (余数1就是8的3次方的系数)
'    -
'②当十进制是小数时,采用"r乘取整"法,即用r乘十进制小数,每乘一次取一次整数,直至小数部分变成0为止.
'例如,把(0.8125)10→(0.1101)2
'0.|8125
'×|   2
'--------
'1.|6250  (整数部分1就是2的-1次的系数)
'×|   2
'--------
'1.|2500  (整数部分1就是2的-2次的系数)
'×|   2
'--------
'0.|5000  (整数部分0就是2的-3次的系数)
'×|   2
'--------
'1.|0000  (整数部分1就是2的-4次的系数)
'③把r1进制转换成r2进制,一般可以先把r1进制先转换成十进制,再从十进制转换成r2进制.
'3.有上面的1可以知道,当r1进制的一个小数转换成十进制时,结果是有限小数还是无限小数,主要是看1/r1是否可以除尽
'例如1/2=0.5  1/4=0.25 等等,说明2进制和4进制转换成10进制,小数都是有限的.
'而1/3=0.3333…… 说没3进制的小数转换成10进制时为无限小数,就得参考用户自定义的小数尾数值了
'10进制的小数转换成r进制,判断它是否能除尽就没上面那么简单了.
'我验算了一晚上,仅仅总结出一条规律,用我所掌握的小学到高中的知识暂时无法证明它的正确性
'而且最近不能联系到我们的数学老师,所以只能硬着头皮用上了.凭空想想倒觉得没什么错.
'方法是这样的.把10进制的小数取出,获得小数点后位数 X ,把小数部分乘以r的X次方
'如果结果是整数,则为有限小数,如果带有小数,则为无限小数
'例如(0.8125)10→(0.1101)2
'(0.8125)*2*2*2*2=13 所以它是有限的
'因为只是个人推测,不能保证正确性
'如果有朋友知道更正确的方法,请联系我 : redraiment@126.com

4 楼

简单而言,按照公式即可实现!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册