uj5u.com熱心網友回復:
漏加一部分因子了bool isPerect(int n) {
int m;
int sum=0;
for (m=1; m<=n/2; ++m) { //因為你只回圈到了n的一半,大于n一半的因子漏了累加了
if (n%m==0) {
sum += m;
if (m!=n/2) sum += n/m; //漏了這里的因子了
}
}
if (sum==n) return true;
return false;
}
uj5u.com熱心網友回復:
糾正一下int sum=1;
for (m=2; m<=n/2; ++m) //從2開始回圈,否則n%1==0,sum+=n/m就有問題,所以去掉1回圈
uj5u.com熱心網友回復:
可是我6,28,8128前三個完美數都跳出來了,就33550336跳不出來
uj5u.com熱心網友回復:
跳不出來是運行慢的緣故吧uj5u.com熱心網友回復:
說不定超過int范圍了,換用unsigned試試uj5u.com熱心網友回復:
2樓和4樓正解那個數出不來是程式運行的慢,畢竟是遍歷3千萬個數字
你可以看看,在輸出8128之后程式其實還在運轉,且不顯示”請按任意鍵結束”
uj5u.com熱心網友回復:
那有沒有什么解決方法呢uj5u.com熱心網友回復:
代碼:#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
bool judge(int n){
int flag=n%10;
if(flag!=6&&flag!=8) return 0;
int sum=1;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
sum+=i;
sum+=(n/i);
}
}
if(sum==n) return 1;
return 0;
}
int main(){
int n;
cin >> n;
for(int i=1;i<=n;i++){
if(judge(i)) cout << i << endl;
}
return 0;
}
uj5u.com熱心網友回復:
另外,496也是完美數。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95832.html
標籤:C++ 語言
上一篇:eclipse debug
下一篇:請問這個如何去實作
