2016-11-21 78 views
-1

我想找到一個數字的所有因數的和,即如果數字是6,我想要有1 + 2 + 3 + 6 = 12。我試圖接近它是:一個數字的所有整數因數的總和

#include <iostream> 

using namespace std; 

int divisorsSum(int n){ 
    int sum=0; 
    for (int i=1; i<=n; i++){ 
     if(n%i==0) 
      i=sum+i; 

    } 
    return sum; 
} 

int main() 
{ 
    cout<<divisorsSum(6); 
} 

然而意外的是完全不工作,它沒有返回,我無法弄清楚什麼是錯我的代碼。

因此,問題是如何使其工作? 順便說一句:沒有必要馬上投下一切我不是專家,是的,我犯了錯誤。

+3

1 + 2 + 3 + 6 = 12。不是11. – user3437460

+5

i = i?這是未定義的。 –

+0

'i = sum + i;'應該是'sum = sum + i'或甚至更好'sum + = i;'。 – NathanOliver

回答

2

你在你的代碼的幾個問題。

int i = i; 

i仍未定義。您可能想要i = 1

i = sum + i; 

總和未更新以上。你可能想sum += i

0
int divisorsSum(int n){ 
    int sum=0; 
    for (int i=1; i<=n; i++){ 
     if(n%i==0) 
      sum+=i; 

    } 
return sum; 
} 
  1. i從1開始,而不是我
  2. 總和+ =我,而不是我= SUM +我
1

你需要改變你的函數divisorsSum使用下面的代碼:

int divisorsSum(int n) 
{ 
    int sum = 0; 
    for (int i = 1; i <= n; i++) 
    { 
     if(n % i == 0) 
     sum += i; 
    } 
    return sum; 
} 
1
for (int i=i; i<=n; i++) 

改變I = i至i = 1

+0

沒有積分,因爲其他答案更完整。 –

0

也許有更好的算法找到一個數字的除數,但這裏是你的代碼的正確版本。

int divisorsSum(int n){ 
    int sum=0; 
    for (int i = 1; i <= n; ++i){ 
     if(n % i == 0) 
      sum += i; 

    } 
    return sum; 
} 

而且這裏是一個小優化的版本,如果i是大於的n一半,則i不能成爲n的約數。

int divisorsSum(int n) { 
    int sum=0; 
    for (int i = n/2; i >= 1; --i){ 
     if(n % i == 0) 
      sum += i; 

    } 
    return sum; 
} 
相關問題