#JavaScriptで各桁の和を求めてみる
Javascript初心者向けの記事です。
調べてもあまりコードが出てこないのと、自分へのメモ書きとして記事にまとめました。
具体的な処理内容
「各桁の和を求める」という処理を例を用いて説明します。
例えば、「12345」という整数があります。
この各桁の和、つまりこの場合は1+2+3+4+5=15を求める処理になります。
12345
という整数を入力したとして、15
という出力をさせたいわけです。
必要な処理
この処理を行うにあたり、必要な処理をまずは分解してみます。
1.入力した整数を文字列(String型)に変換する
整数型の場合、12345で一つの整数とされるため、「各桁」という概念がありません。そこで、まずは整数を文字列(String型)に変換します。
2.「各桁」を「文字列のi番目」という形で一つずつ取り出す
文字列(String型)に変換することで、文字列の0番目=1となり、例えばdata[0]
で1のみを取り出すことができるようになります。
(data、には文字列を定義した変数が入ります)
3.取り出した「文字列のi番目」を整数に変換
また整数型に戻します。文字列からdata[0]
で取り出した「1」は文字(String型)です。
そのため、例えばdata[0] + data[1]
とそのまま書いてしまうと、12
が出力されます。文字(String型)を+すると、そのまま繋げてしまうのです。
今回は和、つまり計算結果を出力させたいので、一度整数に戻す必要があるのです。
4.変換した「文字列のi番目」を足していく
整数型に戻した後、+することで和となります。
処理をコードで表現してみる
上で整理した処理内容を元に、コードを書いてみます。
筆者もJS初心者なので、難しいコードではありません。
〜登場人物紹介〜
allsum:ファンクションの名前です。allsum(入力)で実行可能。
num:各桁の和を求めたい整数をいれる変数です。上の例に従うなら、12345を入れます。
sum:各桁の和を表す変数です。最初は0ですが、各桁をどんどん取り出し、この変数に加算していく形で、「各桁の和」とします。
function allsum(num){
//String型に変換
num = num.toString();
//各桁の和を表す変数sumを定義
let sum = 0;
//文字列のi番目を取り出し、sumに足していく
for(let i=0; i < num.length; i++){
sum = sum + parseInt(num[i])
}
return parseInt(sum);
}
このようになります。
for文を回す際、i < num.length
がポイントです。
iは0から数えますが、num.lengthは1から数えます。
つまり、12345の場合、num[0]〜num[4]で1〜5を取り出しますが、num.lengthは単純に5となります。
そのため、i <= num.length
と記述してしまうと、num[5]も取り出して和に加えようとします。しかし、num[5]は存在しないので、計算結果はNaNとなってしまうのです(1敗)。
実際の出力
allsumという名前のファンクションを定義しています。
このallsumに整数を入力すると、各桁の和が出力されてリターンされます。
console.log(allsum(12345)); 15