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) の値を表示するサブルーチン
これらを組み合わせてプログラムを作る。
前 | この章の目次 | 次 |
---|