一个正整数称为阿姆斯特朗数(
n 阶) if
abcd... = an + bn + cn + dn +
对于 3 位数的阿姆斯特朗数,每位数的立方和等于该数本身。例如,153 是一个阿姆斯特朗数,因为
153 = 1*1*1 + 5*5*5 + 3*3*3
在这个程序中,我们将打印两个整数之间的所有阿姆斯特朗数。这意味着这两个整数不会是范围的一部分,而只会是它们之间的那些整数。
例如,假设我们要打印 153 和 371 之间的所有 Armstrong 数字。这两个数字也是阿姆斯特朗数字。
然后,此程序打印所有大于 153 且小于 371 的阿姆斯壮数,即 153 和 371 不会被打印,即使它们是 Armstrong 数字。
注意: 提示: 在尝试这个程序之前,学习如何检查一个整数是否是阿姆斯特朗数。
两个整数之间的阿姆斯特朗数
#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); // swap numbers if high < low if (high < low) { high += low; low = high-low; high-= low; } // 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 two numbers(intervals): 200 2000 Armstrong numbers between 200 and 2000 are: 370 371 407 1634
在程序中,外循环从(low+ 1)到(high-1)进行迭代。在每次迭代中,检查
number 是否是 Armstrong 数。
在外循环内部,首先计算一个整数的位数并存储在
count
中。并且,各个数字的幂的总和存储在
result 变量中。
如果
number 等于
result
,则该数字为 Armstrong 数。
注意事项:
如果 high 的用户输入小于 low 的输入,您需要交换 low 和 high .要了解更多信息,请查看我们关于交换两个数字的示例。
您需要在外循环的每次迭代中将 count 和 result 重置为 0。