JavaScriptで自己分割数を判定する方法をわかりやすく解説
本記事では、引数として受け取った数値が自己分割数(Self-Dividing Number)であるかどうかを判定するJavaScript関数の作成方法を解説します。
自己分割数とは?
自己分割数とは、その数を構成するすべての桁の数字で割り切れる数のことです。判定関数は、結果に応じて次のようにメッセージを出力します。
- 自己分割数の場合:「この数値は自己分割数です」
- 自己分割数でない場合:「この数値は自己分割数ではありません」
具体例
- 128:1・2・8 のどの数字でも 128 を割り切れるため、自己分割数です。
- 102:「0」という桁を含んでいるため、自己分割数ではありません(0 で割り切れる数は存在しない)。なお、JavaScript では
n % 0はNaNを返すため、特別な分岐を追加しなくても自動的に false と判定されます。 - 26:6 で割ると余りが出てしまうため、自己分割数ではありません。
サンプルコード
実際のコードは次のとおりです。
const num1 = 128;
const num2 = 102;
const num3 = 26;
const selfDivisible = num => {
const originalNum = num; // 元の数値を保存
let current = num;
while (current > 0) {
const digit = current % 10; // 下1桁を取り出す
if (originalNum % digit !== 0) { // その桁で割り切れるか判定
return false;
}
current = Math.floor(current / 10); // チェック済みの桁を削る
}
return true;
};
console.log(selfDivisible(num1)); // true
console.log(selfDivisible(num2)); // false
console.log(selfDivisible(num3)); // false
コードの解説
このアルゴリズムは、数値を下の桁から順番に調べていくシンプルな仕組みです。
current % 10:10 で割った余りを求めることで、現在の下1桁を取得します。originalNum % digit !== 0:元の数値がその桁の数字で割り切れない場合、即座にfalseを返して処理を終了します。Math.floor(current / 10):小数点以下を切り捨てることで、チェック済みの下1桁を取り除き、次の桁へ進みます。- すべての桁が条件を満たしていれば、
trueを返します。
計算量は数値の桁数 d に対して O(d) となり、非常に効率的なアルゴリズムです。
出力結果
true false false
128 は自己分割数なので true、102 は 0 を含み、26 は 6 で割り切れないため、それぞれ false と判定されています。
-
JavaScriptで入力値が数字か文字かを判定する方法【isNaN()関数の使い方】
入力された値が数字か文字(数値以外)かを判定するには、JavaScriptのisNaN()関数を使用します。この関数は、値がNaN(Not a Number:非数)である場合にtrueを返します。この特性を利用することで、ユーザーが入力した値が数値かどうかを簡単にチェックできます。 isNaN()関数とは isNaN()は「is Not a Number」の略称です。引数として渡された値が数値として解釈できない場合にtrueを、数値として解釈できる場合はfalseを返します。これにより、「入力内容が数字かどうか」をシンプルに判定できるのが特徴です。 サンプルコード 以下のコードでは、フォームの
-
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 までの数字が順番に出力されるため、行が進む