C语言显示两个区间内阿姆斯特朗数的程序

要理解这个示例,您应该了解以下 C 编程 主题


一个正整数被称为 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("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 是否为阿姆斯特朗数。

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

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

注意事项

  • 如果用户输入的 high 小于 low,则需要交换 lowhigh。欲了解更多信息,请查看我们关于交换两个数字的示例。
  • 在外循环的每次迭代中,都需要将 countresult 重置为 0。
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战