一个正整数如果满足其数字的 n 次幂之和等于该数本身,则称该数为(n 阶)阿姆斯特朗数。
abcd... = an + bn + cn + dn +
对于一个三位数的阿姆斯特朗数,其每个数字的立方和等于该数本身。例如,153 是一个阿姆斯特朗数,因为
153 = 1*1*1 + 5*5*5 + 3*3*3
检查三位数阿姆斯特朗数
#include <stdio.h>
int main() {
int num, originalNum, remainder, result = 0;
printf("Enter a three-digit integer: ");
scanf("%d", &num);
originalNum = num;
while (originalNum != 0) {
// remainder contains the last digit
remainder = originalNum % 10;
result += remainder * remainder * remainder;
// removing last digit from the orignal number
originalNum /= 10;
}
if (result == num)
printf("%d is an Armstrong number.", num);
else
printf("%d is not an Armstrong number.", num);
return 0;
}
输出
Enter a three-digit integer: 371 371 is an Armstrong number.
检查 n 位数阿姆斯特朗数
#include <stdio.h>
int main() {
unsigned long long int num, originalNum, remainder, n = 0;
unsigned long long int result = 0;
printf("Enter an integer: ");
scanf("%llu", &num);
originalNum = num;
// store the number of digits of num in n
while (originalNum != 0) {
originalNum /= 10;
++n;
}
originalNum = num;
while (originalNum != 0) {
remainder = originalNum % 10;
// calculate remainder^n
unsigned long long int power = 1;
for (unsigned long long int i = 0; i < n; i++) {
power *= remainder;
}
result += power;
originalNum /= 10;
}
// if num is equal to result, the number is an Armstrong number
if (result == num)
printf("%llu is an Armstrong number.\n", num);
else
printf("%llu is not an Armstrong number.\n", num);
return 0;
}
输出
Enter an integer: 1634 1634 is an Armstrong number.
在此程序中,首先计算一个整数的位数,并将其存储在 n
中。然后,在第二个 for
循环的每次迭代中,我们计算每个数字的幂。