21xrx.com
2025-04-15 02:12:38 Tuesday
文章检索 我的文章 写文章
C++如何寻找指定区间内的阿姆斯特朗数?
2023-07-10 19:29:52 深夜i     21     0
C++ 寻找 指定区间 阿姆斯特朗数

阿姆斯特朗数是指一个n位十进制数,每个位上的数字的n次幂之和等于它本身。例如,153就是一个阿姆斯特朗数,因为$1^3+5^3+3^3=153$。

在C++中,可以使用循环和逐位分离的方法来寻找指定区间内的阿姆斯特朗数。首先,需要编写一个函数来计算一个数的位数,以便确定搜索范围。以下是一个简单的计算位数的函数:

int numDigits(int num) {
  int digits = 0;
  while (num > 0) {
    digits++;
    num /= 10;
  }
  return digits;
}

接下来,可以编写一个函数来计算一个数是否为阿姆斯特朗数。以下是一个简单的计算阿姆斯特朗数的函数:

bool isArmstrong(int num) {
  int sum = 0;
  int temp = num;
  int digits = numDigits(num);
  while (temp > 0) {
    int digit = temp % 10;
    sum += pow(digit, digits);
    temp /= 10;
  }
  return (sum == num);
}

使用上述功能函数可以编写以下主函数来寻找指定区间内的阿姆斯特朗数:

#include <iostream>
#include <cmath>
int numDigits(int num) {
  int digits = 0;
  while (num > 0) {
    digits++;
    num /= 10;
  }
  return digits;
}
bool isArmstrong(int num) {
  int sum = 0;
  int temp = num;
  int digits = numDigits(num);
  while (temp > 0) {
    int digit = temp % 10;
    sum += pow(digit, digits);
    temp /= 10;
  }
  return (sum == num);
}
void findArmstrong(int start, int end) {
  for (int i = start; i <= end; i++) {
    if (isArmstrong(i))
      std::cout << i << std::endl;
    
  }
}
int main() {
  int start = 100;
  int end = 999;
  std::cout << "Armstrong numbers between " << start << " and " << end << " are:" << std::endl;
  findArmstrong(start, end);
  return 0;
}

在上面的主函数中,定义了要搜索的起始和结束点,并调用了`findArmstrong`函数来寻找指定区间内的阿姆斯特朗数。`findArmstrong`函数循环搜索区间内的所有数,并调用`isArmstrong`函数来确定每个数是否为阿姆斯特朗数。如果是,函数会将该数输出到控制台。

在使用这个程序时,可以通过修改`start`和`end`变量来改变要搜索的区间。例如,如果要寻找位于1和1000之间的阿姆斯特朗数,只需要将`start`和`end`变量分别设置为1和1000即可。

总之,寻找指定区间内的阿姆斯特朗数很简单。使用C++编写一个函数来计算阿姆斯特朗数,然后使用循环和逐位分离的方法来搜索指定区间内的所有数即可。

  
  

评论区

请求出错了