【JavaScript】指定した範囲内のアームストロング数をすべて求める方法
アームストロング数とは?
アームストロング数(Armstrong Number)とは、各桁の数字を桁数乗して合計した値が、元の数と一致する数のことを指します。以下の等式が成り立つ場合、その数はアームストロング数と呼ばれます。
xy..z = x^n + y^n + .....+ z^n
ここで、n はその数の桁数を表します。
具体例:370 の場合
370 は3桁の数なので、各桁を3乗して足し合わせます。
3^3 + 7^3 + 0^3 = 27 + 343 + 0 = 370
計算結果が元の数「370」と一致するため、370 はアームストロング数であることがわかります。
範囲内のアームストロング数を求める関数
それでは、2つの数値(下限と上限)を受け取り、その範囲に含まれるアームストロング数をすべて返すJavaScript関数を作成してみましょう。範囲の端の数自体がアームストロング数である場合は、それらも結果に含めます。
実装コード
const isArmstrong = number => {
let num = number;
const len = String(num).split("").length;
let res = 0;
while(num){
const last = num % 10;
res += Math.pow(last, len);
num = Math.floor(num / 10);
};
return res === number;
};
const armstrongBetween = (lower, upper) => {
const res = [];
for(let i = lower; i <= upper; i++){
if(isArmstrong(i)){
res.push(i);
};
};
return res;
};
console.log(armstrongBetween(1, 400));コードの解説
- isArmstrong 関数: 数値を文字列に変換して桁数(len)を求め、whileループで1桁ずつ取り出しながら各桁を桁数乗して合計します。最後に合計値が元の数と一致するかどうかを真偽値で返します。
- armstrongBetween 関数: 下限から上限まで順番に各数値を isArmstrong 関数で判定し、アームストロング数であれば配列に追加します。
実行結果
コンソールには以下のように出力されます。
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371 ]
この結果から、1〜400の範囲には 153、370、371 といった3桁のアームストロング数が含まれていることが確認できます。1桁の数(1〜9)はすべて n=1 の累乗となるため、自動的にアームストロング数として判定されます。
-
JavaScriptの範囲オーバーフロー・範囲アンダーフロー(rangeOverflow/rangeUnderflow)プロパティの使い方
rangeOverflow・rangeUnderflowプロパティとはJavaScriptでは、フォーム要素の validity プロパティ(ValidityStateオブジェクト)を利用することで、ユーザーが入力した値が条件を満たしているかどうかを簡単に検証できます。この中には、数値の入力範囲をチェックするための「rangeOverflow」と「rangeUnderflow」という2つのプロパティが用意されています。Range Underflow(範囲アンダーフロー)入力要素の値が、min属性で指定された最小値よりも小さい場合、validity.rangeUnderflow は true を
-
2つの整数の間のアームストロング数の求め方|C言語サンプルコード付きで解説
アームストロング数とは?アームストロング数(Armstrong Number)とは、n桁の整数の各桁を取り出してそれぞれn乗し、それらを合計した値が元の数と一致するような整数のことです。数式で表すと次のようになります。abcd... = an + bn + cn + dn + ...特に3桁のアームストロング数の場合は、「各桁の数字の3乗の和がその数自身と等しい」という条件になります。最も有名な例が 153 です。153 = 13 + 53 + 33 = 1 + 125 + 27 = 153つまり、153 はアームストロング数です。ほかにも、370、371、407 などが3桁のアームストロング