JavaScript Armstrong数字的程序
在这篇文章中,我们将看到JavaScript程序来检查给定的数字是不是Armstrong数字。
一个 Armstrong数字 是一个n位数字,它是其所有位数的n次幂之和。例如,考虑一个3位数,即153,它是一个3位数,且其所有位数的立方和将等于该数字本身,即153。
13 = 1
53 = 5*5*5 = 125
33 = 3*3*3 = 27
13 + 53 + 33 = 1+125+27 = 153
为了将其推广到特定的语法形式,将使用以下语法:
abcd… = pow(a,n) + pow(b,n) + pow(c,n) + pow(d,n)+....
这里a、b、c、d……表示基数,n表示指数。
有几种方法可以用来检查一个数是否是阿姆斯特朗数,具体如下:
- 使用toString()和split()方法
- 使用Naive方法
- 使用Array from()方法
我们将通过示例来探讨上述所有方法以及它们的基本实现。
方法1:使用toString()和split()方法
在这种方法中,我们可以使用toString()将给定的输入数转换为字符串,然后使用split()方法将它拆分为单个数字的数组。然后,reduce()方法迭代每个数字并使用acc参数累加求和。它使用Math.pow()方法将每个数字提升为阶数次方。在计算完和之后,函数将其与原始数字进行比较。如果和等于这个数,就会打印一条消息表示它是一个阿姆斯特朗数。
语法:
// Syntax for toString() Method
obj.toString()
// Syntax for split() Method
str.split(separator, limit)
示例: 在这个示例中,我们使用toString()方法和split()方法来检查阿姆斯特朗数。
Javascript
function isArmstrong(number) {
const digits = number.toString().split('');
const order = digits.length;
const sum = digits.reduce(
(acc, digit) =>
acc + Math.pow(parseInt(digit), order), 0);
if (sum === number) {
console.log(
number + " is an Armstrong Number");
}
else {
console.log
(number + " is not an Armstrong Number");
}
}
isArmstrong(9474);
isArmstrong(520);
输出
9474 is an Armstrong Number
520 is not an Armstrong Number
方法2:使用原生方法
原生方法是一种简单的算法,它通过反复迭代一组数字并测试每个数字来判断它是否是阿姆斯特朗数。在此方法中,使用循环获取数字的每个位数,然后将每个位数的n次方求和得到总和。
示例: 此示例实现了验证阿姆斯特朗数的原生方法。
Javascript
function isArmstrong(number) {
let temp = number;
let o = order(temp)
let sum = 0;
// Loop until temp is greater than 0
while (temp) {
remainder = temp % 10;
// Floor value of the quotient
temp = Math.floor(temp / 10);
sum = sum + Math.pow(remainder, o);
}
if (sum === number) {
console.log(number + " is an Armstrong Number");
}
else {
console.log(number + " is Not an Armstrong Number");
}
}
// Function to calculate number of digits
function order(number) {
let n = 0;
while (number > 0) {
n++;
number = Math.floor(number / 10);
}
return n;
}
// Input value 153
isArmstrong(153);
// Input value 520
isArmstrong(520);
输出
153 is an Armstrong Number
520 is Not an Armstrong Number
方法3:使用Array.from()方法
我们也可以使用Array.from()方法来获取数字,该方法将对象转换为数组。通过利用该方法,您可以在不明确使用toString()和split()函数的情况下获得相同的结果。
语法:
Array.from(object, mapFunction, thisValue);
示例: 在此我们使用了上述解释的方法。
Javascript
function isArmstrong(number) {
const digits = Array.from(String(number), Number);
const order = digits.length;
// Calculate the total sum using array.map()
const sum = digits.reduce(
(acc, digit) =>
acc + Math.pow(parseInt(digit), order), 0);
if (sum === number) {
console.log(
number + " is an Armstrong Number");
}
else {
console.log(
number + " is not an Armstrong Number");
}
}
// Input number 1634
isArmstrong(1634);
// Input number 749
isArmstrong(749);
输出
1634 is an Armstrong Number
749 is not an Armstrong Number