C++程序 要求输出1000以内的完数

#include<iostream>usingnamespacestd;intmain(){cout<<"1000之内的所有完数为"<<endl;floati=1.0;i... #include<iostream>
using namespace std;
int main()
{
cout<<"1000之内的所有完数为"<<endl;
float i=1.0;
int s=0,n=1;
while(n<=1000)
{
while(i<n)
{
if(n/i-int(n/i)==0)
s=s+i;
i=i+1;
if(s==n)
cout<<n<<endl;
}
n=n+1;
}
return 0;
}
这个程序哪里错了
展开
 我来答
Chock9898
高粉答主

2020-01-27 · 关注我不会让你失望
知道答主
回答量:85
采纳率:100%
帮助的人:1.4万
展开全部

if(n/i-int(n/i)==0)错了。

1、if(n/i-int(n/i)==0)这个改为if(n%i == 0)

2、找到一个完数以后,没有把s初始化为0,所以后面肯定会出错。在n=n+1;后面加s=0。

C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

扩展资料:

使用C++编程时的有关事项:

1、开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。

2、生成程序是指将源码转换成一个可以运行的应用程序的过程。如果程序的编写是正确的,那么通常只需按一个功能键,即可搞定这个过程。

3、对程序进行编译,这需要用到编译器。编译器将C++语句转换成机器码(也称为目标码);如果这个步骤成功,下一步就是对程序进行连接,这需要用到链接器。

参考资料来源:百度百科-C++

箩勒个卜
2013-04-17
知道答主
回答量:28
采纳率:0%
帮助的人:17.7万
展开全部
int main()
{
cout<<"1000之内的所有完数为:"<<endl;
int i=0,n;
for(n=1;n<1000;n++)
{
int s=0;
for(i=1;i<=n/2;i++)
if(0==n%i)
s+=i;
if(s==n)
printf("%4d",n);
}
printf("\n");
return 0;
}
兰州 你的我没怎么看....那个浮点数运算本来就是不精确的....我写了个 你先看看...结果是三个 6 28 496

我看了下兰州的程序 给你改好了 有注释
int main()
{
cout<<"1000之内的所有完数为"<<endl;
int i=1;
//int s=0,n=1;
int s,n=2; //第一次比较时i=1,n=1...条件肯定不成立 所以直接n=2
while(n<=1000)
{
s=0,i=1; //每次比较的时候s都要置为0 不然保留上次的结果
while(i<n) //第一次比较时i=1,n=1...条件肯定不成立 所以直接n=2
{
if(n%i==0)
s=s+i;
i=i+1;
//if(s==n)
//cout<<n<<endl; //这个判断应该是在while(i<n)这个循环外面判断
}
if(s==n)
cout<<n<<endl;
n=n+1;
}
return 0;
}
结果运行 6 28 496 兰州你看看 还有if(n/i-int(n/i)==0)浮点数的比较是比精确的 一般是(a-b)<1e-5这样的....直接==是不对的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9746fdc
推荐于2016-10-16 · TA获得超过270个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:207万
展开全部
if(n/i-int(n/i)==0)这个改为if(n%i == 0)更好
第二:你找到一个完数以后,没有把s初始化为0,所以后面肯定会出错。
在n=n+1; 后面加s=0;
追问
还是不可仪啊
追答
少写了个,还有i=1;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式