[英]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;
}
也許有更好的算法可以找到數字的除數,但這是代碼的正確版本。
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.