虫食い算

 投稿者:山中和義  投稿日:2009年11月 3日(火)14時33分34秒
  割り算のサンプル・プログラムです。

アルゴリズム
・「除数」場合の数×「商」場合の数 の検算を行います。
・除数、商、被除数が揃ったところで、筆算で途中結果を検証していきます。
!虫食い算

! a 除数    □□8□□ ← b 商
!     ------------------
!  □□ )□□□□□□□ ← c 被除数
!      □□□     ← d
!      ----------
!         □□   ← e
!         □□   ← f
!        ----------
!          □□□ ← g
!          □□□ ← h
!         --------
!            4 ← 余り


LET t0=TIME


DEF fnFIG(x,n)=MOD(INT(x/10^n),10) !n桁目の数を得る ※0:一の位、1:十の位、2:百の位、…

LET ANSWER_COUNT=0 !解答数

FOR a=10 TO 99 !除数

   FOR b=10000 TO 99999 !商

      IF fnFIG(b,2)<>8 THEN GOTO 100 !商の百の位は8か?

      LET c=b*a + 4 !※余りを加算する
      IF c<1000000 OR c>9999999 THEN GOTO 100 !被除数cは7桁の数?


      LET d=fnFIG(b,4)*a !途中結果d
      IF d<100 OR d>999 THEN GOTO 100 !3桁の数?

      LET w=INT(c/10000) !※筆算を参照

      LET e=(w-d)*100+fnFIG(c,3)*10+fnFIG(c,2) !途中結果e
      IF e<10 OR e>99 THEN GOTO 100 !2桁の数?

      LET f=fnFIG(b,2)*a !途中結果f
      IF f<10 OR f>99 THEN GOTO 100 !2桁の数?

      LET g=(e-f)*100+fnFIG(c,1)*10+fnFIG(c,0) !途中結果g
      IF g<100 OR g>999 THEN GOTO 100 !3桁の数?

      LET h=fnFIG(b,0)*a !途中結果h
      IF h<100 OR h>999 THEN GOTO 100 !3桁の数?

      IF g-h<>4 THEN GOTO 100 !余りは4か?


      LET ANSWER_COUNT=ANSWER_COUNT+1 !解答数
      PRINT "No.";ANSWER_COUNT

      !結果の表示
      PRINT USING "    #####": b !商
      PRINT       "  -----------"
      PRINT USING " ## ) #######": a,c !除数、被除数
      PRINT USING "   ###": d
      PRINT       "   -----"
      PRINT USING "     ##": e
      PRINT USING "     ##": f
      PRINT       "    ----"
      PRINT USING "     ###": g
      PRINT USING "     ###": h
      PRINT       "    ------"
      PRINT       "      4"
      PRINT

100       !continue
       NEXT b

200    !continue
    NEXT a


    PRINT "計算時間=";TIME-t0

 END

参考 かけ算 
No.698 [元記事へ]
 

戻る