如果一个正整数(阶数为 n)的各位数字的 n 次幂之和等于该数字本身,则称该数为阿姆斯特朗数。
abcd... = an + bn + cn + dn + ...
对于一个三位数的阿姆斯特朗数,其每个数字的立方和等于该数本身。例如,153 是一个阿姆斯特朗数,因为
153 = 1*1*1 + 5*5*5 + 3*3*3
示例:检查三位数阿姆斯特朗数
#include <iostream>
using namespace std;
int main() {
int num, originalNum, remainder, result = 0;
cout << "Enter a three-digit integer: ";
cin >> num;
originalNum = num;
while (originalNum != 0) {
// remainder contains the last digit
remainder = originalNum % 10;
result += remainder * remainder * remainder;
// removing last digit from the original number
originalNum /= 10;
}
if (result == num)
cout << num << " is an Armstrong number.";
else
cout << num << " is not an Armstrong number.";
return 0;
}
输出
Enter a positive integer: 371 371 is an Armstrong number.
在程序中,我们使用 while 循环,直到 originalNum 变为 0。
在循环的每次迭代中,将 orignalNum 的最后一位数字的立方加到 result 中。
remainder = originalNum % 10;
result += remainder * remainder * remainder;
然后,从 orignalNum
中移除最后一位数字。
当循环结束时,各个数字的立方和存储在 result 中。
示例:检查 n 位数阿姆斯特朗数
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int num, originalNum, remainder, n = 0, result = 0, power;
cout << "Enter an integer: ";
cin >> num;
originalNum = num;
while (originalNum != 0) {
originalNum /= 10;
++n;
}
originalNum = num;
while (originalNum != 0) {
remainder = originalNum % 10;
// pow() returns a double value
// round() returns the equivalent int
power = round(pow(remainder, n));
result += power;
originalNum /= 10;
}
if (result == num)
cout << num << " is an Armstrong number.";
else
cout << num << " is not an Armstrong number.";
return 0;
}
输出
Enter an integer: 1634 1634 is an Armstrong number.
在此程序中,首先计算输入数字的位数,并将其存储在 n 中。
在 while
循环的每次迭代中,使用 pow() 函数计算每个数字的幂。
另请阅读