2016-11-21 9 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; 

上記は更新されていません。 = 1

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から始まり、+ = iとない私=合計はない私
  2. 合計+ I
1

を望んでいました数値の除数を見つけることができますが、ここで正しいコードのバージョンがあります。

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

    } 
    return sum; 
} 

そして、ここで少し最適化されたバージョンであり、iは、inの除数することはできませんnの半分よりも大きい場合。

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

    } 
    return sum; 
} 
1
for (int i=i; i<=n; i++) 

変更私:あなたはおそらくsum += iあなたは、次のコードを使用するように機能divisorsSumを変更する必要が

+0

他の回答がより完全であるため、ポイントがありません。 –

0

はたぶんより良いアルゴリズムがある私に=私を

int divisorsSum(int n) 
{ 
    int sum = 0; 
    for (int i = 1; i <= n; i++) 
    { 
     if(n % i == 0) 
     sum += i; 
    } 
    return sum; 
} 
関連する問題