• ベストアンサー

配列の加算

最近javascriptを本を買ってきて勉強し始めたのですが、 本に載っていた問題が分からない上、解答が載った冊子をなくして困っています。 どなたか教えていただけないでしょうか。 ○まず1~9の数字を画面上に出力 ○次に改行をして、↑で出力した数字の隣り合わせた数字同士を足して出力  もし足した数が2桁になった場合は1の位のみを出力 ○この処理を最後の1桁になるまで続ける  最終的には、  123456789  35791356   8260481    ・    ・ の様に逆ピラミッド型になります。 for文やwhile文を使って処理を繰り返す事と、 2桁になった時は、10で割って余りを出すかのかなとぼんやりとしか分かりません。 お手数ですが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえばこんな感じ 2段目は35791356ではなく35791357では? <script language=javascript> str="123456789"; for(i=str.length;i>0;i--){ document.write(str+"<br>"); str2=""; for(j=1;j<str.length;j++){ str2+=(Number(str.substring(j,0))+Number(str.substring(j+1,0)))%10; } str=str2; } </script>

mocococo
質問者

お礼

早い回答ありがとうございます。 あぁっ本当ですね、2段目の計算を間違えていました。 投稿する前に確認したつもりでしたが…お恥ずかしいです(^^;) なるほど、こういう風に書けば良いのですね。 初心者ゆえ、まだ理解できない箇所もありますが、一つずつ調べていきたいと思います。 本当にありがとうございました。

その他の回答 (1)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★私は整数型で回答をします。 ・問題は隣り合う数字同士を足し合わせて 1 桁になるまで繰り返す digital root ですね。  紹介するサンプルでは、計算中の a の数が出力されますので計算アルゴリズムも『目』で  確認できます。そして、最後に計算結果として 1 桁の数が出力されます。 ・なお、サンプルの1行目は乱数を用いて数を決めています。  [F5]キーを押すとごとに再計算されます。お試しあれ。  それでは下のサンプルを見て下さい。 サンプル: var a = Math.floor(Math.random() * 10000000000000000); ←乱数で数を決める document.write( '乱数 = ', a, '<BR><BR>' ); while ( a >= 10 ){  document.write( '計算中...', a, '<BR>' );  a = Math.floor(a / 10) + (a % 10); ←ここがポイント } document.write( '<BR>計算結果 = ', a, '<BR>' ); 解説: ・整数値の 1 桁の値を 10 で割った整数に足しこんでいます。  これを 1 桁になるまで繰り返します。また、1 桁になるまでとは、10 以上なら繰り返す  条件にすれば良いのです。10 以上が 2 桁になるので。分かりますよね。 ・ただ、問題では逆ピラミッド型にしないといけないのでしょうか。  ここがよく分かりませんが、隣り合う数を足しこんで最終的に 1 桁になる数を求める  だけならば紹介したサンプルを利用すれば簡単ですよ。 ・以上。参考に!