一个数的所有整数除数之和
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);
}
然而令人惊讶的是它根本不起作用,它returns什么都没有,我无法弄清楚我的代码有什么问题。
因此问题是如何让它发挥作用?
顺便说一句:立即对我不是专家的所有内容投反对票是没有意义的,是的,我确实犯了错误。
int divisorsSum(int n){
int sum=0;
for (int i=1; i<=n; i++){
if(n%i==0)
sum+=i;
}
return sum;
}
- i 从 1 开始而不是 i
- sum+=i 而不是 i=sum+i
您的代码中有几个问题。
int i = i;
和i
仍未定义。你可能想要 i = 1
i = sum + i;
sum 上面没有更新。你可能想要 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;
}
这里有一个稍微优化的版本,如果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;
}
我想求一个数的所有除数之和,即如果这个数是 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);
}
然而令人惊讶的是它根本不起作用,它returns什么都没有,我无法弄清楚我的代码有什么问题。
因此问题是如何让它发挥作用? 顺便说一句:立即对我不是专家的所有内容投反对票是没有意义的,是的,我确实犯了错误。
int divisorsSum(int n){
int sum=0;
for (int i=1; i<=n; i++){
if(n%i==0)
sum+=i;
}
return sum;
}
- i 从 1 开始而不是 i
- sum+=i 而不是 i=sum+i
您的代码中有几个问题。
int i = i;
和i
仍未定义。你可能想要 i = 1
i = sum + i;
sum 上面没有更新。你可能想要 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;
}
这里有一个稍微优化的版本,如果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;
}