1.逆順の数との足し算

自然数の加法回文性

10以上の自然数について、自分自身と逆順にした数を足すという操作を行っていくと、
何回かの繰り返しの後、ほとんどの数は回文的になる。
このことをここでは「自然数の加法回文性」と呼ぶことにする。

例1  n=59のとき、    59+95=154
                      154+541=605
                      605+506=1111
      となり、3回目で回文的になる。

例2  n=157のとき   157+751=908
                      908+809=1717
                    1717+7171=8888
      となり、3回目で回文的となる。

こうして見ていくと、確かにどんな数でも回文的になるように見えるが、

例3  n=89のとき      89+98=187
                      187+871=968
                      968+869=1837
                    1837+7381=9218
                          ……

となり、手計算ではらちがあかないのでプログラムを作ってみる。

プログラム

以下の機能(サブルーチン)が必要となる。

(1) 逆順の数と足し算するサブルーチン
(2) 回文性の判定を行うサブルーチン

まず、n=89自体の表現方法について考えてみる。

今やろうとしている(1)(2)は、基本的に1桁の数に対する操作の組合せである。
例えば、 (1)は筆算で考えると1の位から1桁ずつ足すことによって求められるし、
また (2)は最下位の桁と最上位の桁を順に比較することにより実現できる。

よってnという1個の変数で表現するよりも、各桁の数を1つずつ持った方が扱いやすい。
そこで次のように表現することにする。

A%(1)=1 の位の数
A%(2)=10 の位の数
A%(3)=100 の位の数
……
A%(i)=10i−1の位の数

また、A%(0)には、その数の桁数をセットしておく。


例  n=89  のとき  A%(0)=2, A%(1)=9, A%(2)=8
    n=157 のとき  A%(0)=3, A%(1)=7, A%(2)=5, A%(3)=1

また、以下のような機能も必要となる。

(3) nを配列 A%(n) に格納するサブルーチン
(4) 配列 A%(n) の値を表示するサブルーチン

これらを組み合わせてプログラムを作る。


この章の目次

E-mail : kc2h-msm@asahi-net.or.jp
三島 久典