正整数を変換する操作についての問題(1)の解答例を示します。
問題(1)の解
同じ数字からなる4桁の数以外の正整数から始めると、6174になることが知られている。同じ数字からなる4桁の数では、変換操作で0になる。
4桁の正整数について、変換操作を続けると6174になることを確認する。
ただし、4桁未満の正整数について、先頭に0を追加して(たとえば、12は0012とする)4桁と見なす。
変換過程を実行するプログラムはつぎのようになる。
●プログラム(N6174a.bas)
' << N6174a.bas >> ' Tiny Basic ' ' 4桁の正整数について、変換操作を続けると6174になることを ' 確認する。 ' Dim D(9): ' 正整数の各桁を保存する配列。 ' ' 桁数Mの設定。 M=4 ' N1=1: ' M桁の正整数の最小数。 N2=10^M-1: ' M桁の正整数の最大数。 ' Print M;"桁の正整数" For N=N1 To N2 ' T0=N: ' 変換操作前の正整数T0。 ' Print T0; Do ' ' 整数T0を各桁に分解し、配列D(*)に保存。Kは桁数。 T=T0: K=0 While T > 0 K=K+1: D(K)=T Mod 10: T=Int(T/10) Wend ' Tが4桁未満の場合、0を補う。 While K < M: K=K+1: D(K)=0: Wend ' ' 配列D(*)の要素を昇順に並べる。 For I=K To 1 Step -1 For J=1 To I-1 If D(J) > D(J+1) Then W=D(J): D(J)=D(J+1): D(J+1)=W End If Next J Next I ' ' 最大数MAXNを求める。 MAXN=0 For I=K To 1 Step -1: MAXN=MAXN*10+D(I): Next I ' ' 最小数MINNを求める。 MINN=0 For I=1 To K: MINN=MINN*10+D(I): Next I ' ' 変換操作後の正整数T1:最大値-最小値 T1=MAXN-MINN ' If (T1 = 0) Or (T0 = T1) Then Print: Exit Do Print"→";T1; T0=T1 Loop Next N End
実行結果
実行結果から、1以上9999以下の正整数について、4個の数字が同じ場合を除き、6174になることを確認した。