亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++求完數

C++求完數

C++
慕婉清6462132 2018-07-29 21:21:16
請高手幫我找出這個求完數的錯誤:#include<iostream.h>void main(){int m;for(m=1;m<=1000;m++){int k=0;for(int i=1;i<=m;i++){if((m%i)==0)k=k+i;}if(k==m)cout<<" "<<m<<endl;}}
查看完整描述

2 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

for(int i=1;i<=m;i++)是錯的,完美數是真因數之和,比如6=1+2+3,6本身是不算6的真因數的。

#include<iostream.h>

void main()
{
int m;
for(m=1;m<=1000;m++)
{
int k=0;
for(int i=1;i<m;i++)//這里修改了
{
if((m%i)==0)
k=k+i;
}
if(k==m)
cout<<" "<<m<<endl;
}
}

查看完整回答
反對 回復 2018-08-02
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

是這樣的……

所謂“完數”是指它的所有小于它本身的因子之和(即不包括本身)等于它本身的數。如:
6是一個完數:6=1+2+3。

要知道1不是完數,而你的程序定義的m是從1開始求,當然會出錯咯,還有就是第二個循環i不應該等于m,應該小于m。

還有一點就是,這樣的程序效率不高,因為只要比到一半就行了……

下面是我幫你改的程序……

#include<iostream.h>

void main(){
int m;
for(m=2;m<=1000;m++)//這里從2開始,因為不考慮1
{
int k=0;
for(int i=1;i<=m/2;i++)//這里只要比到一半就行了,沒必要比到m,因為大于m/2的數不可能被m整除……
{
if((m%i)==0)
k=k+i;
}
if(k==m)
cout<<" "<<m<<endl;
}
}

希望對你有所幫助……

查看完整回答
反對 回復 2018-08-02
  • 2 回答
  • 0 關注
  • 1158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號