原文: https://www.programiz.com/c-programming/examples/armstrong-number-interval
在此示例中,您将学习查找用户输入的两个整数之间的所有阿姆斯特朗数。
要理解此示例,您应该了解以下 C 编程主题:
一个正整数称为阿姆斯特朗数(n
的阶数),如果
abcd... = a<sup>n</sup> + b<sup>n</sup> + c<sup>n</sup> + d<sup>n</sup> +
对于 3 位的阿姆斯特朗数,每个数字的立方数之和等于数字本身。 例如,153 是阿姆斯特朗数,因为
153 = 1*1*1 + 5*5*5 + 3*3*3
在尝试该程序之前,请学习如何检查整数是否为阿姆斯特朗数。
两个整数之间的阿姆斯特朗数
#include <math.h>
#include <stdio.h>
int main() {
int low, high, number, originalNumber, rem, count = 0;
double result = 0.0;
printf("Enter two numbers(intervals): ");
scanf("%d %d", &low, &high);
printf("Armstrong numbers between %d and %d are: ", low, high);
// iterate number from (low + 1) to (high - 1)
// In each iteration, check if number is Armstrong
for (number = low + 1; number < high; ++number) {
originalNumber = number;
// number of digits calculation
while (originalNumber != 0) {
originalNumber /= 10;
++count;
}
originalNumber = number;
// result contains sum of nth power of individual digits
while (originalNumber != 0) {
rem = originalNumber % 10;
result += pow(rem, count);
originalNumber /= 10;
}
// check if number is equal to the sum of nth power of individual digits
if ((int)result == number) {
printf("%d ", number);
}
// resetting the values
count = 0;
result = 0;
}
return 0;
}
输出
Enter an integer: 1634
1634 is an Armstrong number.
在程序中,外循环从(low + 1
)迭代到(high - 1
)。 在每次迭代中,都会检查number
是否是阿姆斯特朗数。
在外循环内部,首先计算一个整数的位数,并将其存储在count
中。 并且,各个数字的幂的总和存储在result
变量中。
如果number
等于result
,则该编号是阿姆斯特朗数。
注意:您需要在外循环的每次迭代中将count
和result
重置为 0。