我的问题看起来像这样 对于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;
}
它现在就像一个魅力。输出有一些太多的空格,但它足够好。非常感谢!
答案 0 :(得分:2)
您需要在while循环的每次迭代开始时将sum的值重置为零,以避免多重和问题。
就额外+而言,您可以在'b'之前而不是之后打印“+”,并且仅当b> 1(保证b的当前值之前的打印值。)
答案 1 :(得分:0)
尝试使用此answer这样的内容,以便在+
的最后一项之后不添加divisors
:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
std::vector<int> properDivisors ( int number ) {
std::vector<int> divisors ;
for ( int i = 1 ; i < number / 2 + 1 ; i++ )
if ( number % i == 0 )
divisors.push_back( i ) ;
return divisors ;
}
int main()
{
for(size_t i = 2; i <= 20; ++i)
{
std::vector<int> divisors = properDivisors(i);
std::cout << i << ": ";
const char *padding = "";
for (auto iter = divisors.begin(); iter != divisors.end(); ++iter) {
std::cout << padding << *iter;
padding = " + ";
}
int sum = 0;
for (auto& n : divisors)
sum += n;
std::cout << " = " << sum;
std::cout << std::endl;
}
}
<强>输出:强>
2: 1 = 1
3: 1 = 1
4: 1 + 2 = 3
5: 1 = 1
6: 1 + 2 + 3 = 6
7: 1 = 1
8: 1 + 2 + 4 = 7
9: 1 + 3 = 4
10: 1 + 2 + 5 = 8
11: 1 = 1
12: 1 + 2 + 3 + 4 + 6 = 16
13: 1 = 1
14: 1 + 2 + 7 = 10
15: 1 + 3 + 5 = 9
16: 1 + 2 + 4 + 8 = 15
17: 1 = 1
18: 1 + 2 + 3 + 6 + 9 = 21
19: 1 = 1
20: 1 + 2 + 4 + 5 + 10 = 22
试试here!