2016-11-21 2 views
-1

Я хочу найти сумму всех делителей числа i.e, если число равно 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; 

сумма не обновляется выше. Вы, наверное, хотели 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. я начинается с 1, а не я
  2. сумма + = я и не я = сумма + я
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; 
}