2016-11-21 4 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); 
} 

그러나 놀랍게도 전혀 작동하지 않습니다, 그것은 아무 것도 반환되지 않으며 나는 내 코드에 어떤 문제가 있는지 알아낼 수 없습니다입니다.

따라서 문제는 어떻게 작동 시키는가? BTW : 나는 전문가가 아닌 모든 투표를 즉시 내려 놓을 수는 없습니다. 그렇습니다. 나는 실수를 저지릅니다.

+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에서 시작 + = 내가 아니라 내가 = 합하지 난
  2. 합 + 내가
1

를 원했다 숫자의 제수를 찾는 것이지만 여기에 올바른 코드 버전이 있습니다. i 다음 in의 제수가 될 수 없습니다 더 큰 n의 절반 이상이있는 경우 여기

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

    } 
    return sum; 
} 

그리고

는 약간의 최적화 된 버전입니다.

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; 
}