找不到(1 + 2 + ... n)^ 2的总和?

时间:2014-09-24 03:58:24

标签: c++

我想弄清楚我的sum2公式出了什么问题。它应该等于sum1,它等于784. sum2的公式=(1 + 2 + ... + n)^ 2。目前使用此代码我得到sum2等于140.任何人都可以告诉我应该如何解决这个问题?或者给出一个提示

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
   double n = 7;
   double sum1 = 0; 
   double sum2 = 0; 
   double sum3 = 0; 
   double sum4 = 0;
   double i = 1;

   while(i <= n){

           sum1 = sum1 + pow(i,3);
           sum2 = sum2 + (i)*(i);
           i++;
}             

           sum3 = (pow(n,2)*pow((n + 1),2)) / 4;
           sum4 = n*(n+1)*(2*n + 1) / (4+2);

这只是代码的一半

3 个答案:

答案 0 :(得分:2)

首先,您的sum1代码目前正在查找 1 ^ 3 + 2 ^ 3 + ... + n ^ 3代替(1 + 2 + ... n) ^ 2

其次,您sum2的代码目前找到了 1 ^ 2 + 2 ^ 2 + ... + n ^ 2代替(1 + 2 + ... n) ^ 2

要修复它,请在while循环中更改2行:

while(i <= n){
   sum1 = sum1 + i;
   sum2 = sum2 + i; //or, since they are the same now, you can accumulate the sum in sun1 and then do sum2 = sum1 outside the while loop.
   i++;
}

然后使用你想要的任何技术来计算一个正方形:

sum1 = pow(sum1, 2); //2, not 3
sum2 = sum2 * sum2;

答案 1 :(得分:1)

你必须找到(1 + 2 + 3 ... + 7) ^ 2。添加(1^2 + 2^2 + 3^2 ... + 7^2)

后,sum2不会till n=7;

所以在里面做:

 sum2 = sum2 + i;

并且在做的时候:

sum2 = sum2*sum2;  

将您的代码更改为:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
   double n = 7;
   double sum1 = 0; 
   double sum2 = 0; 
   double sum3 = 0; 
   double sum4 = 0;
   double i = 1;

   while(i <= n){

           sum1 = sum1 + i;
           sum2 = sum2 + i;
           i++;
}             
cout<<pow(sum1, 2);// both will be same
cout<<sum2*sum2;
           sum3 = (pow(n,2)*pow((n + 1),2)) / 4;
           sum4 = n*(n+1)*(2*n + 1) / (4+2);

}

答案 2 :(得分:0)

while(i <= n){

           sum1 = sum1 + pow(i,3);
           sum2 = sum2 + i;
           i++;
}
sum2 = sum2*sum2;  

错过了sum1计算中的错误。 @FreeNickname钉了它 - 这是正确的答案。