课内学习03
查找某个范围内的完全数:
自顶向下、逐步求精的程序设计方法找出小于或等于给定数lastInteger的所有“完全数”,lastInteger是从键盘提取用户输入的整数。所谓完全数,即其各因子之和正好等于本身的数。如6=1+2+3,28=1+2+4+7+14,所以6,28都是完全数。
样例:要找出小于或等于哪一个数的所有完全数?1000
在屏幕插入:小于或等于1000的所有完全数有:6 28 496
由于题目太过简单,暂时不解释,直接上代码:
#include<iostream>
#include<cmath>
using namespace std;
//判断传入的数是否为完全数
bool complete(int i)
{
int sum = 0;
for (int j = 2; j <= sqrt(i); j++)
{
if (i%j == 0)
{
if (i / j != j) sum += j + (i / j);
else sum += j;
}
}
if ((sum+1) == i)return true;
else return false;
}
int main()
{ system("color F0");
double lastInteger,count = 0;
cout << "要找出小于或等于哪一个数的所有完全数?" << endl ;
cin >> lastInteger;
for (int i = 2; i <= lastInteger; i++)
{
if(complete(i))//若传回值为真,则i为完全数
{
if(count == 0)//当存在完全数时,控制下面句子只输出一次
{
cout << "小于或等于"<<lastInteger<<"的所有完全数有:" ;
count++;
}
cout << i << " ";
}
}
//判断小于或等于number中是否不存在完全数
if(count == 0)cout << "小于或等于"<<lastInteger<<"的数中没有完全数!"<<endl;
system("pause");
return 0;
}
测试运行结果如图: