回文数の和

 投稿者:山中和義  投稿日:2016年 4月 9日(土)13時35分50秒
  問題
自然数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

 

Re: 回文数の和

 投稿者:山中和義  投稿日:2016年 6月10日(金)12時20分16秒
  > No.4032[元記事へ]

> 問題
> 自然数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 M=100 !101219327 !987789 !10000
LET H=0
LET P=1
DO
   LET T=P !回文数を作る
   LET X=0 !並びを逆にする
   LET K=0 !桁数
   DO WHILE T>0
      LET X=X*10+MOD(T,10)
      LET K=K+1
      LET T=INT(T/10)
   LOOP
   LET A=P*10^K+X !そのまま元の数にくっつける  ab…cc…ba
   LET B=INT(P/10)*10^K+X !頭の1桁を除いたものを元の数にくっつける  ab…c…ba
   !!PRINT P;A;B !debug
   IF B>M THEN EXIT DO !これ以降は可能性がない
   LET H=H+B
   IF A<=M THEN LET H=H+A

   LET P=P+1
LOOP
PRINT H
END

 

戻る