gpt4 book ai didi

C++,输出2到20之间数字的适当除数之和

转载 作者:行者123 更新时间:2023-11-28 01:53:15 27 4
gpt4 key购买 nike

我的问题是这样的对于 2 到 20 的数字,输出适当的除数及其总和。

所以它应该是这样的:

2: 1 = 1

3: 1 = 1

4: 1+2 = 3

5: 1 = 1

6: 1+2+3 = 6

...

20: 1+2+4+5+10 = 23

这是我到目前为止写的:

#include <iostream>

int main () {
int a=2;
int sum=1;
while (a<=10){
std::cout<<a<<": ";
for(int b=1; b<a; b=b+1)
{

if(a%b == 0)
{
std::cout<<b<<" + ";
sum+=b;}
if (b == a-1){
std::cout<<"= "<<sum<<"\n";
}

}
a++;
}
return 0;
}

当我编译并运行时,输出最终看起来像这样:

2: 1 + = 2

3: 1 + = 3

4: 1 + 2 + = 6

5:1 + = 7

6: 1 + 2 + 3 + = 13

7:1 + = 14

8: 1 + 2 + 4 + = 21

9: 1 + 3 + = 25

10: 1 + 2 + 5 + = 33

我目前的问题是:

为什么它给我所有前面 b 个结果的总和?我试图获得每个数字的除数之和。它为我提供了所有先前总和的总和。

另外,我如何去掉最后多余的 (+)?

非常感谢!

编辑:

谢谢大家!这是我调整并稍微清理后的代码!

#include <iostream>

int main() {
int a = 2;

while (a <= 20) {
std::cout <<a <<": ";
int sum = 0;
for (int b = 1; b < a; b = b + 1) {
if (a%b == 0) {
if (b == 1) {
std::cout <<b;
} else {
std::cout <<" + " <<b; }
sum += b; }
if (b == a-1) {
std::cout <<"= " <<sum <<"\n";
}
}
a++;
}
return 0;
}

它现在就像一个魅力。输出有一些太多的空格,但它已经足够好了。非常感谢!

最佳答案

您需要在 while 循环的每次迭代开始时将 sum 的值重置为零,以避免多重求和问题。

就额外的 + 而言,您可以在 'b' 的值之前而不是之后打印“+”,并且仅当 b > 1 时(保证在 b 的当前值之前打印值)。

关于C++,输出2到20之间数字的适当除数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com