|
問題
自然数nに対し、n以下の回文数の総和をH(n)と定義します。
例えば、H(20)=56です。20以下の自然数では1~9と11が回文数だからです。
同様に、H(100)=540,H(10000)=545040,H(987789)=533115672,H(101219327)=557319321362 となることが示せます。
H(n)を求めるプログラムを書いてください。
答え
LET N=101219327 !20 !100 !10000 !987789
LET S=0 !総和
LET K=1 !k桁の回文数を生成する
DO
IF MOD(K,2)=0 THEN !桁数が偶数の場合
LET M=K/2
FOR i=10^(M-1) TO 10^M-1 !上半分 ab…c
LET X=i !並びを反転させて下半分とする c…ba
LET T=i
FOR J=1 TO M
LET X=X*10+MOD(T,10)
LET T=INT(T/10)
NEXT J
!!PRINT X !ab…cc…ba
IF X>N THEN EXIT DO !可能性がない
LET S=S+X
NEXT i
ELSE !奇数の場合
LET M=INT(K/2)+1
FOR i=10^(M-1) TO 10^M-1 !上半分 ab…c
LET X=i !並びを反転させて下半分とする …ba
LET T=INT(i/10)
FOR J=1 TO M-1
LET X=X*10+MOD(T,10)
LET T=INT(T/10)
NEXT J
!!PRINT X !ab…c…ba
IF X>N THEN EXIT DO !可能性がない
LET S=S+X
NEXT i
END IF
LET K=K+1
LOOP
PRINT S !H(n)
END
|
|