跳到主要内容

C 编程:显示两个区间内的阿姆斯特朗数

要理解这个例子,你应该具备以下 C 语言编程 相关知识:

如果一个正整数是阿姆斯特朗数(阶数为 n),那么它的每个位上数字的 n 次幂之和等于它本身。

abcd... = an + bn + cn + dn + ...

对于三位数的阿姆斯特朗数,其每个数字的立方和等于该数本身。例如,153 是一个阿姆斯特朗数,因为

153 = 1*1*1 + 5*5*5 + 3*3*3

在这个程序中,我们将打印两个整数之间的所有阿姆斯特朗数。这意味着这两个整数不会被包括在范围内,只有位于它们之间的整数才会被打印。

例如,假设我们想打印 153371 之间的所有阿姆斯特朗数。这两个数也都是阿姆斯特朗数。

因此,这个程序会打印大于 153 且小于 371 的所有阿姆斯特朗数,即使 153371 本身是阿姆斯特朗数,也不会被打印。

提示: 在尝试此程序之前,了解如何检查一个整数是否是阿姆斯特朗数

打印两个整数间的阿姆斯特朗数

#include <math.h>
#include <stdio.h>
int main() {
int low, high, number, originalNumber, rem, count = 0;
double result = 0.0;
printf("输入两个数字(区间):");
scanf("%d %d", &low, &high);
printf("在 %d 和 %d 之间的阿姆斯特朗数为:", low, high);

// 如果 high < low,则交换数字
if (high < low) {
high += low;
low = high - low;
high -= low;
}

// 从 (low + 1) 到 (high - 1) 遍历 number
// 在每次迭代中,检查是否为阿姆斯特朗数
for (number = low + 1; number < high; ++number) {
originalNumber = number;

// 计算数字的位数
while (originalNumber != 0) {
originalNumber /= 10;
++count;
}

originalNumber = number;

// result 包含每个位数字的 nth 次幂之和
while (originalNumber != 0) {
rem = originalNumber % 10;
result += pow(rem, count);
originalNumber /= 10;
}

// 检查数字是否等于各位数字的 nth 次幂之和
if ((int)result == number) {
printf("%d ", number);
}

// 重置变量值
count = 0;
result = 0;
}

return 0;
}

输出

输入两个数字(区间):200
2000
2002000 之间的阿姆斯特朗数为:370 371 407 1634

在这个程序中,外层循环从 (low+ 1)(high - 1) 迭代。在每次迭代中,检查 number 是否为阿姆斯特朗数。

在外层循

环内部,首先计算整数的位数并存储在 count 中。然后,各位数字的幂之和存储在 result 变量中。

如果 number 等于 result,则该数是阿姆斯特朗数。

注意:

  • 如果用户输入的 high 小于 low,则需要交换 lowhigh。要了解更多,请查看我们关于交换两个数字的示例。
  • 在外层循环的每次迭代中,需要将 countresult 重置为 0。