JavaScriptで指定した範囲内のnの倍数の最大値を求める方法
問題
数値 n と上限値 b を引数として受け取り、次の条件をすべて満たす最大の整数 num を返すJavaScript関数を作成します。
- num は n で割り切れる(n の倍数である)
- num は b 以下である
- num は 0 より大きい
例えば、n = 14、b = 400 の場合、400 以下の 14 の倍数の中で最も大きい値が答えとなります。
解法1:ループを使ったシンプルなアプローチ
n から b まで順番に値を調べ、n で割り切れる数が見つかるたびに最大値を更新していく方法です。直感的で分かりやすいのが特徴です。
const n = 14;
const b = 400;
const biggestDivisible = (n, b) => {
let max = 0;
for(let j = n; j <= b; j++){
if(j % n == 0 && j > max){
max = j;
}
}
return max;
};
console.log(biggestDivisible(n, b));
出力結果
392
400 以下の 14 の倍数の中で最も大きいのは 392(= 14 × 28)なので、正しく出力されています。
ただし、この方法は b と n の差が大きくなるとループ回数が増え、処理時間が長くなるという欠点があります。
解法2:Math.floorを使った高速なアプローチ
実は、ループを使わなくても1行で計算できます。「b を n で割った商の小数点以下を切り捨て、それに n を掛け戻す」ことで、b 以下の最大の n の倍数が一発で求まります。
const biggestDivisible = (n, b) => Math.floor(b / n) * n;
console.log(biggestDivisible(14, 400)); // 392
この方法の計算量は O(1) なので、b がどれほど大きな数でも瞬時に結果を得られます。実務ではこちらの数学的アプローチが推奨されます。
-
JavaScriptのNumber()関数とは?使い方とサンプルコードを解説
JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを
-
JavaScriptで数字パターンを表示する方法【初心者向けサンプルコード】
本記事では、テキスト入力欄とボタンを備えたJavaScript・HTMLプログラムの作成方法を解説します。ユーザーが入力欄に任意の数値(例:5)を入力してボタンをクリックすると、画面に以下のような数字パターンが表示される仕組みです。(n = 5 の場合の出力例)01 01 02 01 02 03 01 02 03 04 01 02 03 04 05仕組みのポイントこのパターンは二重ループ(ネストしたforループ)を使うことで実現できます。外側のループが「行」を制御し、内側のループがその行に表示する「数字の個数」を制御します。i 行目には 1 から i までの数字が順番に出力されるため、行が進む