JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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 がどれほど大きな数でも瞬時に結果を得られます。実務ではこちらの数学的アプローチが推奨されます。


  1. JavaScriptのNumber()関数とは?使い方とサンプルコードを解説

    JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを

  2. 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 までの数字が順番に出力されるため、行が進む