我想弄清楚我的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);
这只是代码的一半
答案 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钉了它 - 这是正确的答案。