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

JavaScriptで7の倍数判定の過程で得られる数値を求める方法


問題

ある整数が 10a + b の形で表せるとき、「a − 2b が 7 で割り切れるならば、元の数も必ず 7 で割り切れる」という性質が成り立ちます。この性質を利用すると、大きな数でも 7 の倍数かどうかを効率的に判定できます。

この変換を、7 で割り切れるかどうかが一目で分かる2 桁以下の数になるまで繰り返していきます。

そこで本記事では、数値を引数として受け取り、その数を 2 桁以下の数に減らすまでに必要な変換の回数と、最終的に得られた数値を配列として返す JavaScript 関数を作成します。

入力

const num = 1603;

出力

const output = [7, 2];

これは次の手順で計算されます。

160 − 2×3 = 154
15 − 2×4 = 7

最終的に得られる値は 7 であり、変換は 2 回行われたことになります。

なぜこの方法で判定できるのか

10a + b ≡ 0 (mod 7) であることと、a − 2b ≡ 0 (mod 7) であることは同値です。これは 10 × (−2) = −20 ≡ 1 (mod 7) という関係によるものです。つまり、大きな数の 7 の倍数判定を、1 桁ずつ減らしながら小さな数の判定へと帰着させることができます。

コード例

const num = 1603;
const findSteps = (num) => {
    let times = 0;
    let result = 0;
    let number = String(num);
    while(number.length > 2){
        times++;
        let firstNumber = Number(number.slice(-1));
        const remaining = Number(number.slice(0, number.length - 1));
        result = remaining - 2 * firstNumber;
        number = String(result);
    }
    return [result, times];
}
console.log(findSteps(num));

コードの解説

String() で数値を文字列に変換し、slice(-1) で末尾の 1 桁(b に相当)を、slice(0, length - 1) で残りの桁(a に相当)を取り出します。続いて「残りの桁 − 2 × 末尾の桁」を計算し、その結果を新しい数値として同じ処理を繰り返します。桁数が 2 以下になった時点でループを抜け、最終的な数値と変換回数を配列で返します。

出力

[7, 2]

  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で指定した範囲内にある「ある数で割り切れる数」の個数を求める方法

    問題2つの整数からなる範囲(配列)を第1引数に、1つの数値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在する「入力された数値で割り切れる数」をすべて見つけ、その合計個数を返します。サンプルコード以下がその実装例です。const range = [6, 57]; const num = 3; const findDivisibleCount = (num = 1, [l, h]) => {    let count = 0;    for(let i = l; i <= h; i++