予選問題解答例 01 PROGRAM PRMAIN 02 COMMON IP1(0:10100) 03 OPEN(5,FILE='sysin',STATUS='OLD',FORM='FORMATTED') 04 OPEN(6,FILE='sysout',STATUS='NEW',FORM='FORMATTED') 05 READ(5,*) ITA 06 IF(ITA.LE.1000) ITA=1000 07 IF(ITA.GT.10000) STOP 1111 08 IT=ITA/3 09 ISHIFT=10**3 10 DO 300 I=0,IT+10 11 IP1(I)=0 12 300 CONTINUE 13 CALL SUB(1,3,128,ITA) 14 CALL SUB(3,1,5,ITA) 15 C 16 DO 310 I=IT+10,1,-1 17 ID=(IP1(I)+100*ISHIFT)/ISHIFT -100 18 IP1(I)=IP1(I)-ID*ISHIFT 19 IP1(I-1)=IP1(I-1)+ID 20 310 CONTINUE 21 WRITE(6,200) (IP1(I),I=0,10) 22 200 FORMAT(1H1,5X,' LN(2)= '/ 23 1 1H ,5X,I2,'.',10(1X,I3)) 24 WRITE(6,210) (IP1(I),I=11,200) 25 210 FORMAT((1H ,5X,3X,10(1X,I3))) 26 NAC=ITA/600 27 IF(MOD(ITA,600).NE.0) NAC=NAC+1 28 DO 320 I=2,NAC 29 K1=200*(I-1)+1 30 K2=MIN(200*I,IT) 31 IF(MOD(I,2).EQ.0) THEN 32 WRITE(6,220) I,NAC,(IP1(J),J=K1,K2) 33 220 FORMAT(1H ,1H /1H ,3X,'P ',I2,'/',I2/ 34 2 (1H ,5X,3X,10(1X,I3))) 35 ELSE 36 WRITE(6,230) I,NAC,(IP1(J),J=K1,K2) 37 230 FORMAT(1H1,1H /1H ,3X,'P ',I2,'/',I2/ 38 2 (1H ,5X,3X,10(1X,I3))) 39 END IF 40 320 CONTINUE 41 CALL PRINT(IP1,ITA) 42 STOP 43 END 44 SUBROUTINE SUB(IA,IB,IC,ITA) 45 DIMENSION IC0(0:10100) 46 COMMON IP1(0:10100) 47 N=(FLOAT(ITA+10)*LOG(10.0E0)-LOG(LOG(10.0E0) 48 1 *FLOAT(ITA+10)/LOG(FLOAT(IC)/FLOAT(IB))*(1.0E0- 49 2 FLOAT(IB)/FLOAT(IC))))/LOG(FLOAT(IC)/FLOAT(IB)) 50 ISHIFT=10**3 51 DO 300 I=0,ITA/3+10 52 IC0(I)=0 53 300 CONTINUE 54 DO 310 I=N,1,-1 55 IAA=IA 56 IBB=0 57 DO 320 J=1,ITA/3+10 58 ID=(IAA*ISHIFT)/I+(IBB*ISHIFT+IB*IC0(J))/IC 59 IAA=IAA*ISHIFT-((IAA*ISHIFT)/I)*I 60 IBB=IBB*ISHIFT+IB*IC0(J)-((IBB*ISHIFT+IB*IC0(J))/IC)*IC 61 IC0(J)=ID 62 320 CONTINUE 63 310 CONTINUE 64 IBB=0 65 DO 330 J=1,ITA/3+10 66 ID=(IBB*ISHIFT+IB*IC0(J))/IC 67 IBB=IBB*ISHIFT+IB*IC0(J)-((IBB*ISHIFT+IB*IC0(J))/IC)*IC 68 IC0(J)=ID 69 330 CONTINUE 70 DO 340 I=0,ITA/3+10 71 IP1(I)=IP1(I)+IC0(I) 72 340 CONTINUE 73 RETURN 74 END 75 SUBROUTINE PRINT(IP1,NT) 76 CHARACTER*1 CHR(0:9) 77 DATA CHR/'0','1','2','3','4','5','6','7','8','9'/ 78 DIMENSION L(0:10100),IP1(0:10100) 79 L(0)=IP1(0) 80 DO 300 I=1,NT,3 81 L(I)=IP1((I-1)/3+1)/100 82 L(I+1)=IP1((I-1)/3+1)/10-10*L(I) 83 L(I+2)=IP1((I-1)/3+1)-100*L(I)-10*L(I+1) 84 300 CONTINUE 85 IF(MOD(NT,3).eq.1) THEN 86 L(NT)=IP1((NT-1)/3+1)/100 87 END IF 88 IF(MOD(NT,3).eq.2) THEN 89 L(NT-1)=IP1((NT-2)/3+1)/100 90 L(NT)=IP1((NT-2)/3+1)/10-10*L(NT-1) 91 END IF 92 WRITE(6,250) CHR(L(0)) 93 250 FORMAT(1H ,1H ,'LN(2) = ',A1,' . ') 94 WRITE(6,270) (CHR(L(I)),I=1,NT) 95 270 FORMAT(50A1) 96 RETURN 97 END