C++ 程序 在两个整数间查找阿姆斯特朗数
如果满足以下条件,则称具有数字a、b、c、d…的正整数为 n 阶阿姆斯特朗数。
abcd... = an + bn + cn + dn +...
153 = 111 + 555 + 333
= 1 + 125 + 27
= 153
因此,153是阿姆斯特朗数。
示例:
输入: 100 400
输出: 153 370 371
解释: 给定两个整数为 100 和 400(区间)
153 = 111 + 555 + 333
= 1 + 125 + 27
= 153
370 = 333 + 777 + 0
= 27 + 343
= 370
371 = 333 + 777 + 111
= 27 + 343 +1
= 371
下面实现的方法很简单。我们遍历给定范围内的所有数字。对于每个数字,首先计算其位数。假设当前数字的位数为 n。然后我们计算其所有数字的 n 次幂的和。如果这个和等于该数字本身,我们就打印这个数字。
// C++ program to find Armstrong
// numbers in a range
#include <bits/stdc++.h>
using namespace std;
// Prints Armstrong Numbers in a
// given range
void findArmstrong(int low, int high)
{
for (int i = low+1; i < high; ++i)
{
// Number of digits calculation
int x = i;
int n = 0;
while (x != 0)
{
x /= 10;
++n;
}
// Compute sum of nth power of
// its digits
int pow_sum = 0;
x = i;
while (x != 0)
{
int digit = x % 10;
pow_sum += pow(digit, n);
x /= 10;
}
// Checks if number i is equal
// to the sum of nth power of
// its digits
if (pow_sum == i)
cout << i << " ";
}
}
// Driver code
int main()
{
int num1 = 100;
int num2 = 400;
findArmstrong(num1, num2);
cout << '';
return 0;
}
输出:
153 370 371