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

时间:2017-02-08 00:47:17

标签: c++

我的问题看起来像这样 对于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;
}

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

2 个答案:

答案 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!