C++第10周项目4参考——完数

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【项目4:输出完数】(课本p86第20题)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。编程找出1000以内的所有完数。提示:首先从2到1000构造循环控制变量为i的外层循环。每次循环中,利用内

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565

【项目4:输出完数】(课本p86第20题)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。编程找出1000以内的所有完数。
提示:首先从2到1000构造循环控制变量为i的外层循环。每次循环中,利用内嵌的循环逐个地求出i的因子,并累加起来(为提高效率,可能的因子从1到i/2),如果因子和等于i,则说明是完全数,输出。然后继续循环,考察i+1……
说明:有些解答,如平台上提供的《c++程序设计经典例题》中用了数组。本题并不是非用数组才能做。类似题目还有关于水仙花数、回文数等,有精力可以自己玩玩。

#include <iostream>
#include<Cmath>
using namespace std;
int main( )
{
  int i,s,j;
  cout<<"2-1000之间的完数有:";
  for(i=2;i<=1000;i++)
  {
    s=1; //1是任何数的因子,所以不再s=1,也使下一句可以从2开始
    for(j=2;j<sqrt(i);j++)   //正因为j从2开始,才有胆量让j到sqrt(i)
      if(i%j==0) s+=(j+i/j);  //加上j的同时,和j对称的那个因子(i/j)也被累加了
                             //思考:如果j允许从1开始,上式会将i本身也累加上去
    if(i==s) cout<<i<<"  ";
  }
  cout<<endl;
  return 0;
}

运行结果:


另解:下面的程序也可以求解,考虑了效率,但不够彻底。

#include <iostream>
using namespace std;
int main( )
{
	int i,s,j;
	cout<<"2-1000之间的完数有:";
	for(i=2;i<=1000;i++)
	{
		s=1; 
		for(j=2;j<=i/2;j++)   
			if(i%j==0) s+=j;  
		if(i==s) cout<<i<<"  ";
	}
	cout<<endl;
	return 0;
}


目录
相关文章
|
1月前
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
121 1
|
1月前
|
算法 测试技术 数据处理
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
65 1
|
1月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
110 7
|
1月前
|
存储 C++ UED
【C++】飞机大战项目记录
通过上面的设计,我们实现来看飞机大战的主要功能
54 4
|
1月前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
30 0
【C++】string学习 — 手搓string类项目
|
1月前
|
C++
C++入门项目——通讯管理系统
C++入门项目——通讯管理系统
|
1月前
|
算法 测试技术 数据处理
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
96 5
|
1月前
|
设计模式 存储 算法
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
|
1月前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
17 0
|
1月前
|
IDE 算法 编译器
快速掌握陌生C++项目的科学与心理学策略
快速掌握陌生C++项目的科学与心理学策略
65 0