显示两数字之间的阿姆斯特朗数的 C 程序

要理解此示例,您应该具备以下 C 语言编程主题的知识:

如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。

如果是 3 位数的阿姆斯特朗数,则每位数的立方的和等于该数本身。例如 153 是一个阿姆斯特朗数。因为: 153 = 1*1*1 + 5*5*5 + 3*3*3

在这个程序中,我们将打印两个整数之间的所有阿姆斯特朗数。这意味着这两个整数将不是范围的一部分,而只是它们之间的那些整数。

例如,假设我们要打印 153 和 371 之间的所有阿姆斯特朗数。这两个数字也是阿姆斯特朗数字。

然后,这个程序打印所有大于 153 和小于 371 的阿姆斯特朗数,即 153 和 371 不会被打印,即使它们是阿姆斯特朗数。

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

两个整数之间的阿姆斯特朗数

#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 first number: 1
Enter second number: 10000
Armstrong numbers between 1 and 10000 are:
1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474,

在程序中,外循环从 (low+1) 到 (high-1) 进行 迭代。在每次迭代中,检查是否数字 是不是阿姆斯特朗数。

在外循环内部,首先计算整数的位数并存储在 count . 并且,各个数字的幂的总和存储在 result

如果 数字等于 result ,该数为阿姆斯特朗数。

注意: 如果用户输入 low 大于 high, 你需要交换 lowhigh 的值. 要了解更多信息,请查看我们关于交换两个数字的示例。