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

C++ C++;,输出从2到20的数字的适当除数之和,c++,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)

我的问题是这样的 对于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;
} 
#包括
int main(){
INTA=2;
整数和=1;

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


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

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


对于额外的+,您可以在“b”的值之前而不是之后打印“+”,并且只有在b>1的情况下(保证在当前的b值之前有一个打印的值)。

尝试类似的方法,它使用此方法不在
除数的最后一项之后添加
+

#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;
    }
}

试试它

试试类似的方法。它使用此方法不在最后一项除数
之后添加
+

#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;
    }
}

试试看

好吧,你只有一个
sum
变量,你一直在添加它,但从未重置。好吧,你只有一个
sum
变量,你一直在添加它,但从未重置。
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