52 lines
1.2 KiB
Plaintext
52 lines
1.2 KiB
Plaintext
10 rem adopted from Commodore BASIC
|
|
20 n = 100 : rem N may be increased, but will slow execution
|
|
30 ln = int(10*n/4)
|
|
40 nd = 1
|
|
50 dim a(ln)
|
|
60 n9 = 0
|
|
70 pd = 0 :rem First pre-digit is a 0
|
|
80 rem
|
|
90 for j = 1 to ln
|
|
100 a(j-1) = 2 :rem Start with 2s
|
|
110 next j
|
|
120 rem
|
|
130 for j = 1 to n
|
|
140 q = 0
|
|
150 for i = ln to 1 step -1 :rem Work backwards
|
|
160 x = 10*a(i-1) + q*i
|
|
170 a(i-1) = x - (2*i-1)*int(x/(2*i-1)) :rem X - INT ( X / Y) * Y
|
|
180 q = int(x/(2*i - 1))
|
|
190 next i
|
|
200 a(0) = q-10*int(q/10)
|
|
210 q = int(q/10)
|
|
220 if q=9 then n9 = n9 + 1 : goto 450
|
|
240 if q<>10 then goto 350
|
|
250 rem q == 10
|
|
260 d = pd+1 : gosub 500
|
|
270 if n9 < 0 then goto 320
|
|
280 for k = 1 to n9
|
|
290 d = 0: gosub 500
|
|
300 next k
|
|
310 rem end if
|
|
320 pd = 0
|
|
330 n9 = 0
|
|
335 goto 450
|
|
340 rem q <> 10
|
|
350 d = pd: gosub 500
|
|
360 pd = q
|
|
370 if n9 = 0 then goto 450
|
|
380 for k = 1 to n9
|
|
390 d = 9 : gosub 500
|
|
400 next k
|
|
410 n9 = 0
|
|
450 next j
|
|
460 print str$(pd)
|
|
470 end
|
|
480 rem
|
|
490 rem output digits
|
|
500 if nd=0 then print str$(d); : return
|
|
510 if d=0 then return
|
|
520 print str$(d);".";
|
|
530 nd = 0
|
|
550 return
|