数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 7101|回复: 2

[原创]用对数(LOG)把十进制数X转换成Y进制数

[复制链接]
发表于 2005-7-6 12:48 | 显示全部楼层 |阅读模式
[watermark]设一个十进制数为X,要转换成Y进制。
步骤:
1、nc=log(X)÷log(Y)
2、把nc退位+1得n,即n=int(nc)+1
   如果“n”为正数,就是指X转换成Y进制所得的最大正数位数,
   即小数点左边第n位数,
   如果“n”为0或负数,就是指X转换成Y进制所得的最接近的小数位数,
   即小数点右边第-n+1位数。
3、mc=Y×(X÷Y^n)
4、把mc退位得m,即m=int(mc)
   “m”就是X转换成Y进制在n位数上的数值,即首位数为m。
5、求出剩余数值:Xb=X-m×Y^(n-1)
   Xb为还未有转换进制的十进制数余数。
6、根据以上步骤把Xb代入X再计算一回就可以求出次位数值,
   如此类推,可以求出第三位数值、第四位数值、、、
   如果X和Y都是正整数,经过多次运算后,余数必定会为0。
注:X>0,Y>1
例1:
把十进制数“8”转换成二进制数。
nc=log(8)/log(2)=3
n=int(nc)+1=4
    十进制数8转换成二进制数后有4位正数。
mc=2*(8/2^4)=1
m=int(mc)=1
    十进制数8转换成二进制数后,小数点左边第4位数为1。
Xb=8-1*2^(4-1)=0
    剩余数值为0。得十进制数8转换成二进制数后,
    小数点左边第4位数为1,第3位数为0,第2位数为0,第1位数为0。
即:8(10)=1000(2)
验证:(1*2^3)+(0*2^2)+(0*2^1)+(0*2^0)=8+0+0+0=8
    以进制(2)为权,n-1为幂,把结果转换为十进制数进行验证。
例2:
把十进制数“19”转换成四进制数。
nc=log(19)/log(4)=2.123963757....
n=int(nc)+1=3
    十进制数19转换成四进制数后有3位正数。
mc=4*(19/4^3)=1.1875
m=int(mc)=1
    十进制数19转换成四进制数后,小数点左边第3位数为1。
Xb=19-1*4^(3-1)=3
    剩余数值为3;
把十进制数“3”转换成四进制数。
nc=log(3)/log(4)=0.79248125....
n=int(nc)+1=1
    十进制数3转换成四进制数后有1位正数。
mc=4*(3/4^1)=3
m=int(mc)=3
    十进制数3转换成四进制数后,小数点左边第1位数为3。
Xb=3-3*4^(1-1)=0
    剩余数值为0。得十进制数19转换成四进制数后,
    小数点左边第3位数为1,第2位数为0,第1位数为1。
即:19(10)=103(4)
验证:(1*4^2)+(0*4^1)+(3*4^0)=16+0+3=19
    以进制(4)为权,n-1为幂,把结果转换为十进制数进行验证。
例3:
把十进制数“184”转换成八进制数。
nc=log(184)/log(8)=2.507853985....
n=int(nc)+1=3
    十进制数184转换成八进制数后有3位正数。
mc=8*(184/8^3)=2.875
m=int(mc)=2
    十进制数184转换成八进制数后,小数点左边第3位数为2。
Xb=184-2*8^(3-1)=56
    剩余数值为56;
把十进制数“56”转换成八进制数。
nc=log(56)/log(8)=1.935784974....
n=int(nc)+1=2
    十进制数56转换成八进制数后有2位正数。
mc=8*(56/8^2)=7
m=int(mc)=7
    十进制数56转换成八进制数后,小数点左边第2位数为7。
Xb=56-7*8^(2-1)=0
    剩余数值为0。得十进制数184转换成八进制数后,
    小数点左边第3位数为2,第2位数为7,第1位数为0。
即:184(10)=270(8)
验证:(2*8^2)+(7*8^1)+(0*8^0)=128+56+0=184
    以进制(8)为权,n-1为幂,把结果转换为十进制数进行验证。
例4:
把十进制数“158”转换成十六进制数。
nc=log(158)/log(16)=1.825945187....
n=int(nc)+1=2
    十进制数158转换成十六进制数后有2位正数。
mc=16*(158/16^2)=9.875
m=int(mc)=9
    十进制数158转换成十六进制数后,小数点左边第2位数为9。
Xb=158-9*16^(2-1)=14
    剩余数值为14;
把十进制数“14”转换成十六进制数。
nc=log(14)/log(16)=0.951838731....
n=int(nc)+1=1
    十进制数56转换成十六进制数后有1位正数。
mc=16*(14/16^1)=14
m=int(mc)=14
    十进制数14转换成十六进制数后,小数点左边第1位数为14。
Xb=14-14*16^(1-1)=0
    剩余数值为0。得十进制数158转换成十六进制数后,
    小数点左边第2位数为9,第1位数为14。
即:158(10)=9E(16)
验证:(9*16^1)+(14*16^0)=144+14=158
    以进制(16)为权,n-1为幂,把结果转换为十进制数进行验证。
例5:
把十进制数“9”转换成π进制数。
nc=log(9)/log(π)=1.919426237....
n=int(nc)+1=2
    十进制数9转换成π进制数后有2位正数。
mc=π*(9/π^2)=2.864788976....
m=int(mc)=2
    十进制数9转换成π进制数后,小数点左边第2位数为2。
Xb=9-2*π^(2-1)=2.716814693....
    剩余数值为2.716814693....;
把十进制数“2.716814693”转换成π进制数。
nc=log(2.716814693)/log(π)=0.873096909....
n=int(nc)+1=1
    十进制数2.716814693转换成π进制数后有1位正数。
mc=π*(2.716814693/π^1)=2.716814693
m=int(mc)=2
    十进制数2.716814693转换成π进制数后,小数点左边第1位数为2。
Xb=2.716814693-2*π^(1-1)=0.716814693....
    剩余数值为0.716814693....;
把十进制数“0.716814693”转换成π进制数。
nc=log(0.716814693)/log(π)=-0.290844088....
n=int(nc)+1=0
    十进制数0.716814693转换成π进制数后最高权位为十分位。
mc=π*(0.716814693/π^0)=2.251939774....
m=int(mc)=2
    十进制数0.716814693转换成π进制数后,小数点右边第1位数为2。
Xb=0.716814693-2*π^(0-1)=0.080194921....
    剩余数值为0.080194921....;
把十进制数“0.080194921”转换成π进制数。
nc=log(0.080194921)/log(π)=-2.204271179....
n=int(nc)+1=-2
    十进制数0.080194921转换成π进制数后最高权位为千分位。
mc=π*(0.080194921/π^-2)=2.486545909....
m=int(mc)=2
    十进制数0.080194921转换成π进制数后,小数点右边第3位数为2。
Xb=0.080194921-2*π^(-2-1)=0.015691852....
    剩余数值为0.015691852....;
把十进制数“0.015691852”转换成π进制数。
nc=log(0.015691852)/log(π)=-3.629339754....
n=int(nc)+1=-3
    十进制数0.015691852转换成π进制数后最高权位为万分位。
mc=π*(0.015691852/π^-3)=1.52852904....
m=int(mc)=1
    十进制数0.015691852转换成π进制数后,小数点右边第4位数为1。
Xb=0.015691852-1*π^(-3-1)=0.00542587....
    剩余数值为0.00542587....;(该转换无法令余数为0,只能得出大确数。)
得,十进制数9转换成π进制数后,
    小数点左边第2位数为2,第1位数为2,
    十分位为2,百分位为0,千分位为2,万分位为1。
即:9(10)=22.2021(π)
验证:(2*π^1)+(2*π^0)+(2*π^-1)+(0*π^-2)+(2*π^-3)+(1*π^-4)
     =6.283185307+2+0.636619772+0+0.064503069+0.010265982
     =8.99457413
加上剩余数值:8.99457413+0.00542587=9
    以进制(π)为权,n-1为幂,把结果转换为十进制数再加上剩余数值进行验证。

oudin
2005-07-06
oudin@tom.com[/watermark]
 楼主| 发表于 2005-7-8 16:59 | 显示全部楼层

[原创]用对数(LOG)把十进制数X转换成Y进制数

为方便大家,已把式子建立在电子表格中运行,只要键入X、Y就可运算。
见附件:进制转换公式.xls
 楼主| 发表于 2012-10-7 17:42 | 显示全部楼层

[原创]用对数(LOG)把十进制数X转换成Y进制数

重新补充附件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-6-19 10:57 , Processed in 0.079541 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表