精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>科学大观>>● 自然科学>>数学>>循环小数化分数的程序!

主题:循环小数化分数的程序!
发信人: sunzx()
整理人: jeter(2000-02-24 22:02:46), 站内信件
使用无穷递缩等比数列的各项和公式,在QB7.1下调通。
'Begin XHXStoFS.bas
'         ..               . .
'Input "0.12 as 0.(12), 1.5323 as 1.5(323).
DEFDBL A-Z
INPUT num$
flxh = 0
IF INSTR(num$, "(") <> 0 THEN
 flxh = -1
 flag = 0
 FOR i = 1 TO LEN(num$)
  p$ = MID$(num$, i, 1)
  IF p$ = "(" THEN
   flag = 1
  ELSEIF p$ = ")" THEN
   flag = 0: p$ = ""
  ELSEIF flag = 0 THEN
   pp$ = pp$ + p$: r$ = r$ + p$
  ELSEIF flag = 1 THEN
   pp$ = pp$ + p$: t$ = t$ + p$
  END IF
 NEXT i
 pp = VAL(pp$)
 r = VAL(r$)
 qq = 10 ^ LEN(t$)
 a1 = pp - r
 fz = qq * r - r + a1 * qq
 fm = qq - 1
ELSE 
 fz = VAL(num$): fm = 1
END IF

'Get rid of the floating point problem !
fz = VAL(STR$(fz))
fm = VAL(STR$(fm))

'yue fen

DO UNTIL (fz = INT(fz)) AND (fm = INT(fm))
 fz = fz * 10
 fm = fm * 10

 'Get rid of the floating point problem !
 fz = VAL(STR$(fz))
 fm = VAL(STR$(fm))
LOOP

IF fz > fm THEN maxf = fz ELSE maxf = fm
f = 2
IF flxh = -1 THEN maxf = SQR(maxf)
DO UNTIL f > maxf
 IF (fz / f = INT(fz / f)) AND (fm / f = INT(fm / f)) THEN
  fz = fz / f
  fm = fm / f
 ELSE
  f = f + 1
 END IF
LOOP

PRINT fz; "/"; fm
'End XHXStoFS.bas

--
Programmers of all lands,
UNITE!
--
程序设计狂人!
EMail: [email protected]
Homepahe:http://nstudio.126.com

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.152.199]

[关闭][返回]