首页 > 技术文章 > 【编程小题目8】求解完数

FoxShark 2015-04-20 15:41 原文

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出100以内的所有完数。

 分析:本质还是求质因数。

#include <iostream>

using namespace std;

bool IsPerfect(int n)
{
  int i, j = 0;
  int Temp = n,Sum = 1;
  int arr[100] = {'0'};

  for(i = 2; i <= n; i++)
  {
    if(i == n)
    {
      arr[j++] = i;
    }
    else
    {
      while (n % i == 0)
      {
        arr[j++] = i;
        n = n / i;
      }
    }
  }
  for(i = 0; arr[i] != 0; i++)
  {
    Sum += arr[i];
  }

  if(Temp == Sum)
  {
    return true;
  }
  else
  {
    return false;
  }

}

int main()
{
  const int n = 100;

  for(int i = 1; i <= n; i++)
  {
    if(IsPerfect(i))
    {
      cout << i;
      if(i % 5 == 0)
      {
        cout << endl;
      }
    }
  }
  cout << endl;

  return 0;
}

推荐阅读