一个数的所有整数除数的总和

时间:2016-11-21 18:56:29

标签: c++ loops integer-division

我想找到一个数的所有除数的总和,即如果数是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);
}

然而令人惊讶的是它根本不起作用,它什么都不返回,我无法弄清楚我的代码有什么问题。

因此问题是如何使其有效? 顺便说一句:没有必要立即投下我不是专家的一切,是的,我确实犯了错误。

5 个答案:

答案 0 :(得分:2)

您的代码中存在多个问题。

int i = i;

并且i仍未定义。你可能想要i = 1

i = sum + i;

总和未在上面更新。你可能想要sum += i

答案 1 :(得分:1)

您需要更改功能divisorsSum以使用以下代码:

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

答案 2 :(得分:1)

for (int i=i; i<=n; i++)

将i = i更改为i = 1

答案 3 :(得分:0)

string[] values = line.split(","); // ex: ["hi, "test", "no", "sup"]

OrderedDictionary od = new OrderedDictionary();
Tuple<int, string[]> innerTuple = new Tuple<int, string[]>(int.Parse(value[0], values);
  1. 我从1开始而不是我
  2. sum + = i而不是i = sum + i

答案 4 :(得分: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;
}