配列を用いた16進化のヒント

筆算で16進数を求めるときの手順をそのまま踏襲する。 そのときに、「何回目の割り算か」を記録し、各回毎の割り算の余りを 配列に記録して行く。

  1. 元の整数を n に代入する。
  2. 空の配列を準備しこの添字のための変数を0にしておく
  3. n が1以上である間くり返す(while)
  4. n を16で割った余りを配列要素に入れる
  5. n を16で割って再代入する
  6. 添字を1増やして3に戻る
  7. 表示の準備として、添字変数を1減らしておく
  8. 添字変数が0以上である間くり返す(while)
  9. 配列[添字] を1桁の16進数で出力する
  10. 添字を1減らして8に戻る

なお、ある変数 x に0から15の値が入っている場合に、 その数に対応する16進数1桁文字列を出すには以下のようにするとよい。

print("0123456789abcdef"[x])

以上をまとめて大まかなプログラムの流れの見本にしたものを示す。

print("10進数: ")
n = 入力して整数化
空の配列を変数に用意
添字用変数に0を代入

while nが0より大きい間
  配列の最新要素に「nを16で割った余り」を代入
  n を16で割て再代入
  添字を1増やす
end

添字を1減らす(添字が1大きい状態でループを終わるので)
while 添字が0以上である間
  print("0123456789abcdef"[添字位置の値])
end
puts("")

たとえば、配列を hex 変数だとし場合以下のように各桁の値が格納される。

16) 64206    (余り)        
16)  4012 …… 14 → e  → hex[0]=14
16)   250 …… 12 → c  → hex[1]=12
16)    15 …… 10 → a  → hex[2]=10 ↑出力時は
16)     0 …… 15 → f  → hex[3]=15 ↑下から上へ
                     → hex[4]は nil (添字は4まで行くが代入されない)
本日の課題