我想找到一个数的所有除数的总和,即如果数是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);
}
然而令人惊讶的是它根本不起作用,它什么都不返回,我无法弄清楚我的代码有什么问题。
因此问题是如何使其有效? 顺便说一句:没有必要立即投下我不是专家的一切,是的,我确实犯了错误。
答案 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);
答案 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;
}