如果一个正整数是 n 阶阿姆斯特朗数,则
abcd... = an + bn + cn + dn + ...
对于一个三位数的阿姆斯特朗数,其各位数字的立方之和等于该数字本身。例如
153 = 1*1*1 + 5*5*5 + 3*3*3 // 153 is an Armstrong number.
示例 1:检查三位数的阿姆斯特朗数
public class Armstrong {
public static void main(String[] args) {
int number = 371, originalNumber, remainder, result = 0;
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber % 10;
result += Math.pow(remainder, 3);
originalNumber /= 10;
}
if(result == number)
System.out.println(number + " is an Armstrong number.");
else
System.out.println(number + " is not an Armstrong number.");
}
}
输出
371 is an Armstrong number.
- 首先,给定的数字(number)的值存储在另一个整数变量 originalNumber 中。这是因为我们需要在最后比较最终数字和原始数字的值。
- 然后,使用 while 循环遍历 originalNumber,直到其等于 0。
- 在每次迭代中,num 的最后一位数字存储在 remainder 中。
- 然后,使用
Math.pow()
函数将 remainder 乘以 3(数字的位数),并将其添加到 result 中。 - 然后,通过除以 10,从 originalNumber 中移除最后一位数字。
- 最后,比较 result 和 number。如果相等,则为阿姆斯特朗数。否则,不是。
示例 2:检查 n 位数的阿姆斯特朗数
public class Armstrong {
public static void main(String[] args) {
int number = 1634, originalNumber, remainder, result = 0, n = 0;
originalNumber = number;
for (;originalNumber != 0; originalNumber /= 10, ++n);
originalNumber = number;
for (;originalNumber != 0; originalNumber /= 10)
{
remainder = originalNumber % 10;
result += Math.pow(remainder, n);
}
if(result == number)
System.out.println(number + " is an Armstrong number.");
else
System.out.println(number + " is not an Armstrong number.");
}
}
输出
1634 is an Armstrong number.
在此程序中,我们使用了两个 for 循环,而不是 while 循环。
第一个 for 循环用于计算数字的位数。它是以下内容的精简形式:
for (;originalNumber != 0; originalNumber /= 10) { n++; }
第二个 for 循环计算 result,在每次迭代中,余数乘以位数 n。
另请阅读