- ベストアンサー
配列の加算
最近javascriptを本を買ってきて勉強し始めたのですが、 本に載っていた問題が分からない上、解答が載った冊子をなくして困っています。 どなたか教えていただけないでしょうか。 ○まず1~9の数字を画面上に出力 ○次に改行をして、↑で出力した数字の隣り合わせた数字同士を足して出力 もし足した数が2桁になった場合は1の位のみを出力 ○この処理を最後の1桁になるまで続ける 最終的には、 123456789 35791356 8260481 ・ ・ の様に逆ピラミッド型になります。 for文やwhile文を使って処理を繰り返す事と、 2桁になった時は、10で割って余りを出すかのかなとぼんやりとしか分かりません。 お手数ですが、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たとえばこんな感じ 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>
その他の回答 (1)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★私は整数型で回答をします。 ・問題は隣り合う数字同士を足し合わせて 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 桁になる数を求める だけならば紹介したサンプルを利用すれば簡単ですよ。 ・以上。参考に!
お礼
早い回答ありがとうございます。 あぁっ本当ですね、2段目の計算を間違えていました。 投稿する前に確認したつもりでしたが…お恥ずかしいです(^^;) なるほど、こういう風に書けば良いのですね。 初心者ゆえ、まだ理解できない箇所もありますが、一つずつ調べていきたいと思います。 本当にありがとうございました。