n進数の割り算

プログラムの仕組み
 @ 変数一覧表
   A$・・・・・・入力した割られる整数
   A(20)・・・割られる整数
      +−−0・・・正負(正=0,負=1)
      +−−1・・・1の位
      +−−2・・・10の位
      ....    AL・・・・・・A$の桁数
   B$・・・・・・入力した割る整数
   B(20)・・・割る整数
      +−−同上
   BL・・・・・・B$の桁数
   H$(12)・・11進数以上のABCDEFとabcdef
       +−1・・・A
       +−2・・・B
       +・・・・・・
       +−7・・・a
       ・・・・
   C・・・・・・・何進数か
   S・・・・・・・商(10進数)
   S$・・・・・・C進数の商
   E$・・・・・・C進数の余り
 A 割り算の考え方 1.割り算について
 N進数の割り算の計算の仕方が分からなかったので、N進数の引き算を使って割り算の商と余りを求めた(小学校で、かけ算は足し算を簡略にしたもの、割り算は引き算を簡略にしたものと教えたことがあったので)。
 引き算は、思ったより簡単で、普通筆算でやるように1の位から順に引いて、ただ繰り下がりの時上の位から借りてくる数が普通(10進数)では10だけど、N進数ではNになるところに気を付けてやればいいのである。
 そして、割られる整数の最上位が0になったら、その桁数を1減らしていく。
 これを繰り返して、引けなくなったら終了して、余りについて考えるところへ行く。
2.引けるかどうかの判定
 はじめに、割られる整数の桁数と割る整数の桁数を比べて、割られる整数の桁数の方が大きければ引けるし、小さければ引けないことになる。
 2つの桁数が同じ場合は、上位の位から数値を比較して、割られす整数が小さければ引けなく、大きければ引け、等しい場合は1つ下位の位を比較する。と言うように判定していく。
    (例)6進数で 3215÷521
        AL=4   3215   1+6−2=5
             −) 521   (上位から借りてきた数)
               2254     S=1
             −) 521
               1333   S=1+1=2
             −) 521
        AL=3    412   S=2+1=3
             −) 521
                XXX(引けない)
       よって 3215÷521=3・・・412
3.余りについて
 余りは正の整数にするという約束をどこかで聞いた。そこで、専門が数学の教頭先生に尋ねたら、「それでいいと思います。」と言われた。だから、
        32÷  10 = 3・・・2
       −32÷  10 =−4・・・8
        32÷(−10)=−3・・・2
       −32÷(−10)= 4・・・8
というようになる。つまり、割られる整数が負の数の場合は、商を1ふやして(符号はあとから考えるので)、逆に引き算をして正の数にする。例えば、2番目の場合、       32−10=22   商 1
         22−10=12   商 1+1=2
         12−10= 2   商 2+1=3
この2は、実は32が−32であるから、−2である。続けると、
          2−10=−8   商 3+1=4
8が−8になって混乱するので、
         10− 2= 8   商 3+1=4
と、逆に引き算をして求める。
 B このプログラムの欠点  このプログラムでは、割り算を引き算で計算しているが、割る整数をそのまま引いて、引けたら商を+1するので、例えば1000000÷1(10進数)をすると、1000000回引き算をしなくてはいけない。かなりの時間がかかる。気の長い人はいいが、気の短い私は15秒も待てないので、割られる整数の桁数が割る整数の桁数の2倍になると待てずにSTOPキーを押してしまう。
 解決方法は、割る整数をそのまま引かずに、割る整数を10倍、100倍してから引いて、10倍なら商を+10して、100倍なら商を+100すればいい。こうすると時間が短くなっていく。

[ 戻る ]