【编程小题目8】求解完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如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;
}

时间: 2024-08-29 17:36:39

【编程小题目8】求解完数的相关文章

【编程小题目6】字符数统计

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. #include <iostream>#include <string>using namespace std; int main(){ const int size = 100; char ch[size]; int CharNum = 0, DigNum = 0, NullNum = 0, OtherNum = 0;  for(int i = 0; i < size; i++) { ch[i] =

九度oj 题目1050:完数

题目1050:完数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8778 解决:3612 题目描述: 求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数.即完数是等于其所有因子相加和的数. 输入: 测试数据有多组,输入n,n数据范围不大. 输出: 对于每组输入,请输出1-n内所有的完数.如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格. 样例输入: 6 样例输出: 6 1 #include <io

九度oj 题目1060:完数VS盈数

题目1060:完数VS盈数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6461 解决:2426 题目描述: 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1.则称其为“完数”:若因子之和大于该数,则称其为“盈数”.求出2到60之间所有“完数”和“盈数”. 输入: 题目没有任何输入. 输出: 输出2到60之间所有“完数”和“盈数”,并以如下形式输出:E: e1 e2 e3 ......(ei为完数)G: g1 g2 g3 ......(gi为盈数)其中两个数之间

九度OJ—题目1050:完数

题目描述: 求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数.即完数是等于其所有因子相加和的数. 输入: 测试数据有多组,输入n,n数据范围不大. 输出: 对于每组输入,请输出1-n内所有的完数.如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格. 样例输入: 6 样例输出: 6 来源: 2010年哈尔滨工业大学计算机研究生机试真题 答疑: 解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobd

题目1060:完数VS盈数------这题做得我想骂人

完数和盈数的思路也简单 这是我AC的代码: #include<iostream> using namespace std; int main() { int i=0,h=0,k=0; int a[60],b[60]; for (i=2;i<61;i++) 将i<=60就错了,太他妈他妈了**************************** { int j,sum=0; for (j=1;j<i;j++) if (i%j==0) sum+=j; if (sum==i) a[

【编程小题目2】求解素数

题目:判断101-200之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数. //连续整除法求解素数 #include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { int i, j, count = 0; for(i = 101; i <= 200;

【编程小题目3】求解水仙花数

题目:打印出100 - 999 之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. #include <iostream> #include <iomanip> using namespace std; int main() {

【编程小题目1】求解斐波拉契数列问题

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”.Fibonacci 数列定义:n = 1,2 时,fib(n) = 1n > 2 时,fib(n) = fib(n-2) + fib(n-1) // 递归算法求解Fibonacci 数列 #i

【编程小题目5】求解最大公约数和最大公倍数

题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法求最大公约数:最大公倍数等于m * n / Gcd(m,n). #include <iostream> using namespace std; int main() { int n, m; int k,r = 1; cout << "Plese input the number n and m:"; cin >> n >> m; k = n * m; whil