JavaScriptでナルシシスト数(水仙数)を判定する方法
ナルシシスト数とは
ナルシシスト数(水仙数・アームストロング数とも呼ばれます)とは、各桁の数字を「桁数」乗した値の合計が、元の数と等しくなるような整数のことです。
例えば次のような数が挙げられます。
153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
この例では、153は3桁の数なので、各桁を3乗して合計すると元の153に戻ります。同様に、1桁の数はすべて自分自身の1乗と一致するため、次のように1もナルシシスト数です。
1 = 1^1 = 1
他にも、370 = 3³ + 7³ + 0³、1634 = 1⁴ + 6⁴ + 3⁴ + 4⁴ などがナルシシスト数に該当します。
判定アルゴリズムの考え方
ナルシシスト数を判定するには、以下の手順で処理を行います。
まずwhileループを使って、対象の数が何桁あるかを数えます。次に、別のwhileループで数値の下1桁を順番に取り出し、その桁数乗した値を変数sumに加算していきます。すべての桁を処理し終えたら、合計値sumが元の数と一致するかどうかをブール値(true/false)として返します。
コード例
実際の実装は以下のようになります。
const isNarcissistic = (num) => {
let m = 1, count = 0;
while(num / m > 1){
m *= 10;
count++;
};
let sum = 0, temp = num;
while(temp){
sum += Math.pow(temp % 10, count);
temp = Math.floor(temp / 10);
};
return sum === num;
};
console.log(isNarcissistic(153));
console.log(isNarcissistic(1634));
console.log(isNarcissistic(1433));
console.log(isNarcissistic(342));
このコードでは、最初のwhileループで変数mを10倍しながら桁数をカウントし、2つ目のwhileループでtemp % 10により下1桁を取得し、Math.pow()で桁数乗して加算しています。Math.floor(temp / 10)で処理済みの桁を取り除くことで、全桁を順に処理できます。
出力結果
コンソールには次のように出力されます。
true true false false
153と1634はナルシシスト数であるためtrue、1433と342は条件を満たさないためfalseが返されています。
-
JavaScriptで数値の各桁の数字を一つずつ分割表示する方法
はじめに この記事では、ユーザーが入力した数値を検証し、有効な数値であればその各桁の数字を画面に一つずつ表示するJavaScriptプログラムの作り方を解説します。 動作イメージ ページ上のボタンをクリックすると入力ダイアログが開き、そこに数値を入力してOKを押すと、入力された数値の各桁が一行ずつ画面に出力される仕組みです。 例えば、入力が次のような場合—— 43354 画面には次のように表示されます。 4 3 3 5 4 完成コード HTML <!DOCTYPE html> <html> <head> &n
-
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 までの数字が順番に出力されるため、行が進む