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

JavaScriptでギャップフル数(Gapful数)を判定して最も近い値を求める方法

ギャップフル数とは?

ギャップフル数(Gapful Number)とは、以下の2つの条件を満たす数のことです。

  • 3桁以上の数である
  • 先頭の桁と末尾の桁をつなげてできる数で、その数を割り切れる

たとえば、1053は4桁の数であり、先頭と末尾をつなげた「13」で割り切れるため、ギャップフル数です。同様に、135は3桁の数であり、「15」で割り切れるため、これもギャップフル数に該当します。

1053 → 4桁であり、13で割り切れる → ギャップフル数
135 → 3桁であり、15で割り切れる → ギャップフル数

やりたいこと

今回の目標は、入力として与えられた数に対して、それに最も近いギャップフル数を返すプログラムを書くことです。

それでは、実際にコードを見ていきましょう。

サンプルコード

const n = 134;
// 数値文字列を受け取り、ブール値を返す
const isGapful = (numStr) => {
    const int = parseInt(numStr);
    return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0;
};
// メイン関数 -- 数値を受け取り、数値を返す
const nearestGapful = (num) => {
    if(typeof num !== 'number'){
        return -1;
    }
    if(num <= 100){
        return 100;
    }
    let prev = num - 1, next = num + 1;
    while(!isGapful(String(prev)) && !isGapful(String(next))){
        prev--;
        next++;
    };
    return isGapful(String(prev)) ? prev : next;
};
console.log(nearestGapful(n));

コードの解説

このプログラムは、大きく分けて2つの関数で構成されています。

isGapful関数: 数値を文字列として受け取り、その数がギャップフル数かどうかを判定します。具体的には、文字列の最初の文字と最後の文字を連結して新しい数を作り、元の数をその数で割った余りが0になるかどうかを確認しています。

nearestGapful関数: メインとなる関数です。まず入力値の型チェックを行い、数値以外が渡された場合は -1 を返します。また、100以下の数はギャップフル数になり得ないため、最小のギャップフル数である 100 を返します。その後、入力値から上下に向かって順番に数を調べ、最初に見つかったギャップフル数を返します。

実行結果

上記のコードを実行すると、コンソールには次のように出力されます。

135

入力した 134 はギャップフル数ではありませんが、近い数を調べると 135 が該当するため、この結果が出力されます。

  1. JavaScriptで数値配列内の母音(ASCIIコード)を判定して置換する方法

    問題 ここで求められているのは、数値の配列を受け取るJavaScript関数を作成することです。配列の中に、ASCIIコードとして母音(a・e・i・o・u)に該当する数値が存在する場合、その数値を対応する母音の文字に置き換え、変換後の新しい配列を返す必要があります。 考え方 ASCIIコードでは、小文字の母音はそれぞれ「a」= 97、「e」= 101、「i」= 105、「o」= 111、「u」= 117 に対応しています。そこで、String.fromCharCode() を使って各数値を文字に変換し、その文字が母音かどうかを判定すればよいわけです。母音に一致した要素だけを文字へ置き換えます

  2. JavaScriptで桁の和が回文数かどうかを判定する関数を作る方法

    問題概要今回は、数値 num を第1引数(唯一の引数)として受け取る JavaScript 関数を作成します。この関数は、num の各桁の数字を合計した値が回文数(palindrome number)である場合に true を返し、そうでない場合は false を返す必要があります。例えば、関数への入力が次のようだったとします。const num = 781296;このとき、期待される出力は以下の通りです。const output = true;出力の解説781296 の各桁の和を計算すると、7 + 8 + 1 + 2 + 9 + 6 = 33 となります。33 は左右から読んでも同じ値になる