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