JavaScriptで複数の数の倍数の合計を求める方法
問題の概要
JavaScriptでは、第一引数として数値 n を受け取り、その後に任意の個数の引数を受け取る関数を作成することが求められます。
この関数の目的は、第二引数以降で指定された数値のいずれかで割り切れる、n以下のすべての数値を合計することです。
具体例
例えば、関数を次のように呼び出した場合を考えてみましょう。
sumMultiples(15, 2, 3);
このとき、期待される出力は次のとおりです。
const output = 83;
これは、該当する数値が以下のとおりだからです。
2, 3, 4, 6, 8, 9, 10, 12, 14, 15
上記の数値をすべて足すと 83 になります。これらはすべて、2または3で割り切れる15以下の数値です。
実装コード
この処理を実現するコードは以下のとおりです。
const num = 15;
const sumMultiple = (num, ...arr) => {
const dividesAny = num => arr.some(el => num % el === 0);
let sum = 0;
while (num) {
if (dividesAny(num)) {
sum += num;
};
num--;
};
return sum;
};
console.log(sumMultiple(num, 2, 3));
コードの解説
このコードのポイントは以下のとおりです。
- 可変長引数(レストパラメータ):
...arrを使うことで、第二引数以降にいくつでも数値を渡せる柔軟な設計になっています。 - 割り切れるかの判定:内部関数
dividesAnyでは、配列のsome()メソッドを使い、対象の数値が指定された数値のどれか1つでも割り切れるかどうかを効率的に判定しています。 - 合計処理:
whileループで n から 1 まで順に各数値をチェックし、条件を満たす数値のみを合計に加算していきます。
出力結果
コンソールには次のように出力されます。
83
このように、可変長引数と some() メソッドを組み合わせることで、任意の個数の約数候補に対応できるシンプルで拡張性の高い実装が可能になります。
-
JavaScriptで範囲内のすべての数値の合計を求める方法
問題範囲を指定する配列を受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲に含まれるすべての自然数(両端の数値も含む)の合計を計算し、その結果を返すものとします。解決策:ループを使った実装以下のコードでは、forループを使って下限値から上限値まで順番に足し合わせていく、シンプルな実装例を示します。const range = [4, 67];const findSum = ([l, h]) => { let sum = 0; for(let i = l; i <
-
JavaScriptで配列内の正の数だけを合計する方法
問題正と負の数値が混在した配列を受け取り、その中に含まれる正の数すべての合計を計算して返すJavaScript関数を作成する必要があります。たとえば、[5, -5, -3, -5, -7, -8, 1, 9] という配列が与えられた場合、正の数は 5、1、9 の3つなので、期待される出力は 15 となります。解決コード以下がその実装例です。const arr = [5, -5, -3, -5, -7, -8, 1, 9]; const sumPositives = (arr = []) => { const isPositive = num => type