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

JavaScriptで数値の桁を並べ替えて最大数と最小数の差を求める方法

問題の概要

正の整数 n を引数に受け取り、その数字(各桁)を並べ替えることで作れる「最大の数」と「最小の数」の差を返す関数 maximumDifference() を作成します。

具体例

例えば、n = 203 の場合を考えてみましょう。

  • 各桁の数字から作れる最大の数320
  • 同様に最小の数23(先頭に0が来ないよう、0を一の位に配置)

したがって、差は次のように計算されます。

320 - 23 = 297

つまり、この場合の出力は 297 となります。

コード実装

それでは、実際に関数を実装してみましょう。基本的なアプローチはシンプルです。数値を文字列に変換して1桁ずつ分解し、昇順と降順にそれぞれソートした後、再び数値に戻して差を求めます。

const digitDifference = num => {
    // 桁を昇順に並べ替えて最小の数を作る
    const asc = +String(num).split("").sort((a, b) => {
        return (+a) - (+b);
    }).join("");
    // 桁を降順に並べ替えて最大の数を作る
    const des = +String(num).split("").sort((a, b) => {
        return (+b) - (+a);
    }).join("");
    return des - asc;
};
console.log(digitDifference(203));
console.log(digitDifference(123));
console.log(digitDifference(546));
console.log(digitDifference(2354));

コードの解説

このコードは以下の手順で動作しています。

  1. String(num) で数値を文字列に変換し、split("") で1桁ずつの要素を持つ配列に分解します。
  2. sort() メソッドに比較関数を渡し、最小の数用には昇順、最大の数用には降順でそれぞれ並べ替えます。
  3. join("") で配列を結合して文字列に戻し、単項プラス演算子 + によって数値へ変換します。
  4. 最後に、最大値から最小値を引いた差を返します。

なお、先頭が0になるケース(例:203 を昇順ソートすると "023")でも、+ 演算子で数値化する際に先頭の0は自動的に無視されるため、意図した通りの最小値が正しく得られます。

実行結果

コンソールには次のように出力されます。

297
198
198
3087
  1. 【JavaScript】数字を並べ替えて作れる最小の数との差を求める方法

    問題の概要本記事では、正の整数を1つだけ引数として受け取るJavaScript関数を作成します。この関数の目的は、元の数値と、その数値の各桁を並べ替えることで作成できる「最小の数」との差を求めて返すことです。具体例例として、入力される数値が 820 の場合を考えてみましょう。各桁を並べ替えて作れる最小の数は「028」、すなわち 28 になります。したがって、期待される出力は次のとおりです。820 - 28 = 792実装コード以下が実際のコード例です。 { const numStr = + num; const sorted = numStr.split().sort();

  2. JavaScriptで数値の桁を並べ替えて最大値を作る方法

    この記事では、与えられた整数の各桁を並べ替えて、表現できる最大の数を求めるJavaScript関数の実装方法を解説します。問題数値 n を引数として受け取るJavaScript関数を用意します。この関数は、n の各桁を自由に入れ替えることで作れる最大の値を返す必要があります。たとえば「124」という数値の場合、各桁(1・2・4)を大きい順に並べ替えることで、最大値である「421」が得られます。アプローチ:大きい桁を左に置く最大の数を作るための基本戦略はシンプルで、「大きな数字ほど上位の桁(左側)に配置する」ことです。これを実現するために、次の手順で処理を行います。数値を文字列に変換し、1桁ずつ