用c++找出2~10000之内的所有完全数

时间:2014.03.20 发布人:独独恋着晨

用c++找出2~10000之内的所有完全数

已解决问题

谷歌独独恋着晨用户在2014.03.20提交了关于“荣威i6用c++找出2~10000之内的所有完全数”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T08:04:40。

我是这样写的:

#include<iostream>

usingnamespacestd;

intmain()

{

inti=2,k=1,Sum=0;

for(i;i<=10000;i++)

{

for(k;k<=i;k++)

{

if(i%k==0)

Sum=Sum+k;

}

}

if(Sum==i)

cout<<i<<endl;

return0;

}

为啥不对呢,求高手帮忙

希望大家能够帮助她。

详细问题描述及疑问:

我是这样写的:

#include<iostream>

usingnamespacestd;

intmain()

{

inti=2,k=1,Sum=0;

for(i;i<=10000;i++)

{

for(k;k<=i;k++)

{

if(i%k==0)

Sum=Sum+k;

}

}

if(Sum==i)

cout<<i<<endl;

return0;

}

为啥不对呢,求高手帮忙

期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
希望以下的回答,能够帮助你。

第1个回答

用户名:zzjbug  

1.for语句的格式是for(init;c来自ondition;post){statments}。

第一个参数是初始态化语句,会在最开始执行一次。'i'本身不能当作一个语句。

所以,一般有两种写法,

不在外部声明变量:for(inti=2;i<=10000;i++) {...}

在外部声明变量:

i罗加再后参杆还知顶修液nti=2;

for(;i<=10000;i++){..问答.}

或者

in超格义州侵菜ti;

for拿说(i=2;i<=1一领0000;i++){}


2.完全数的定义,是真因子之和等于自身。所以,**循环里面,应该是k<i而不是<=。

3.**组西样的循环用来判断i是系式观右商状谁或不是完全数,每次开始都有重置k和Sum。


4.每次**循环结束以后,即完成了对i的判断,此时应该输出判断结果。cout用在程序结尾,那么最终最多只能输出一个结果。显然是不对的。


修改过后的代码如下:

inti,k,sum;
fo题合逐游在端宗吃全菜r(i=2;i<=10000;i++)
{
for(sum会普责食振班感委翻施金=1,k=2;k<i;k+供端格动若朝径获材排京+)
if(i%k==0)
s阳汽亮殖善洲季机天其um+=k;
if(sum==i)cout<<i<<endl;

}