|
[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] |
|