21xrx.com
2024-12-26 16:28:05 Thursday
登录
文章检索 我的文章 写文章
C++编程:求两个整数的所有完美数
2023-07-13 22:14:07 深夜i     --     --
C++ 编程 整数 完美数

完美数是指一个正整数等于它的因子之和,例如 6 是完美数,因为它的因子为 1、2、3,而 1+2+3=6。现在,我们要编写一个 C++ 程序,可以求出两个给定正整数之间的所有完美数。

下面是本文的代码:

#include

#include

using namespace std;

int sumOfDivisors(int num)

{

  int sqrtNum = sqrt(num);

  int sum = 1;

  for (int i = 2; i <= sqrtNum; i++) {

    if (num % i == 0) {

      int otherDivisor = num / i;

      if (i == otherDivisor) {

        sum += i;

      }

      else {

        sum += i + otherDivisor;

      }

    }

  }

  return sum;

}

int main()

{

 int start;

 int end;

 cout << "请输入两个正整数之间的开始数字:";

 cin >> start;

 cout << "请输入两个正整数之间的结束数字:";

 cin >> end;

 cout << "两个正整数之间的完美数有:" << endl;

 for (int i = start; i <= end; i++) {

  int sum = sumOfDivisors(i);

  if (i == sum)

   cout << i << " ";

 }

 cout << endl;

 return 0;

}

首先,我们定义了一个函数 sumOfDivisors,用于计算一个数字的因子之和。该函数的实现思路为:遍历 2 到该数字的平方根之间的所有数字,如果该数字能够整除当前数字,则把该数字和当前数字除以该数字的商相加,最后返回因子之和。

然后,在 main 函数中,我们要求用户输入两个正整数,分别表示开始和结束的数字。接着,我们遍历这两个数字之间的所有整数,对于每个数字,我们使用 sumOfDivisors 函数计算出它的因子之和,如果该数字等于它的因子之和,那么它就是完美数。

最后,我们输出所有完美数。

需要注意的是,本程序中的求平方根方法使用了 math.h 中的 sqrt 函数。

运行该程序,我们得到如下结果:

请输入两个正整数之间的开始数字:1

请输入两个正整数之间的结束数字:10000

两个正整数之间的完美数有:

6 28 496 8128

所以,两个正整数之间的完美数有 6、28、496 和 8128。本程序能够有效地解决完美数的问题,具有一定的实用价值。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复