|
发表于 2005-4-9 18:47:55
|
显示全部楼层
所求有理数的分子分母的长度总是可以知的吧?
长度减1除以3就得到m或n.
如(十进制) x=1234/5678, y=9012/3456, z=7890/1234
法一: Rational=1 1234 5678 9012 3456 7890 1234
还原: 总长 25位, m=(25-1)/6=4
按顺序拆 p1=1234, q1=5678, p2=9012, q2=3456, p3=7890, q3=1234
法二: Rational=1 1234 9012 7890 / 1 5678 3456 1234
还原: 同理可得(设P/Q为一个数).
或者...... 这样更符合题意:
把pi,qi用'0'补成相同长度, 拆分后按顺序拼成一个数(在首位添"1") 如
x=13/1543 =0013/1543
y=343/2452=0343/2452
z=1334/3 =1334/0003
拼的顺序是 p1的某位;q1的对应位;p2的对应位;q2的对应位;p3的对应位;q3的对应位...
"某位"是由高到低, 对应的意思是同为 ...千位或百位等等.
Rational=1 010210 053430 144530 333243
还原时不必在意共有几位, 去首"1"后按顺序像发牌似的组成原来的6个数:
p1="", q1="", p2="", q2="", p3="", q3=""
Rational 010210 053430 144530 333243
发第一轮:
p1="0", q1="1", p2="0", q2="2", p3="1", q3="0"
Rational 053430 144530 333243
发第二轮(即 pi=pi*10+Rational[j]):
p1="00", q1="15", p2="03", q2="24", p3="13", q3="00"
Rational 144530 333243
发第三轮:
p1="001", q1="154", p2="034", q2="245", p3="133", q3="000"
Rational 333243
....最终得到
x=0013/1543=13/1543
y=0343/2452=343/2452
z=1334/0003=1334/3
[ Last edited by count on 2005-4-9 at 19:27 ] |
|