簡體   English   中英

一個數字的所有整數除數之和

[英]Sum of all integer divisors of a number

我想找到一個數字的所有除數之和,即如果數字是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);
}

但是令人驚訝的是,它根本不起作用,它什么也不返回,而且我無法弄清楚我的代碼出了什么問題。

因此,問題是如何使其發揮作用? 順便說一句:立即投票否決我不是專家的一切都沒有意義,是的,我確實犯了錯誤。

您的代碼中有幾個問題。

int i = i;

而且i仍然沒有定義。 您可能想要i = 1

i = sum + i;

總和沒有在上面更新。 你可能想要sum += i

您需要將函數divisorsSum更改為使用以下代碼:

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

將i = i更改為i = 1

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. sum + = i而不是i = sum + i

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM