为什么我的代码返回了错误的平方值?C++

Why is my code returning the wrong value for squaring? C++

本文关键字:方值 C++ 错误 我的 代码 返回 为什么      更新时间:2023-10-16

到目前为止,这是我的代码,但答案是不正确的。我做错了什么?我应该找出平方和和前100个自然数的平方和之间的差。

#include<iostream>
using namespace std;
int main(){
int sumOfSquare = 0;
for(int i=1; i<=100; i++){
i = i*i;
sumOfSquare += i;
};
int squareOfSum = 0;
for(int i; i<=100; i++){
squareOfSum +=i;
};
squareOfSum = squareOfSum * squareOfSum;
int difference = squareOfSum - sumOfSquare;
cout<<difference;
}

正如Evg所建议的,如果不修改循环的运行次数,就无法修改循环/索引变量。

尝试为"临时"(每次迭代(和添加另一个变量,然后使用它。像这样:

#include<iostream>
using namespace std;
int main(){
int sumOfSquare = 0;
for(int i=1, j; i<=100; i++){
j = i*i;
sumOfSquare += j;
};
int squareOfSum = 0;
for(int i = 1; i<=100; i++){
squareOfSum +=i;
};
squareOfSum = squareOfSum * squareOfSum;
int difference = squareOfSum - sumOfSquare;
cout<<difference;
}

编辑:再次根据Evg,您没有在第二个循环中初始化i,所以它的初始值是未定义的,并且循环了未定义的次数。将int i = 1添加到第二个循环中(在我的代码中已修复(。

您的两个循环都有问题。第一个是i = i * i,这会导致循环无法按照您想要的方式运行,第二个是在没有初始化的情况下使用i。即使修复了这些问题,您的代码也非常低效。你可以通过使用一点数学方法使其效率为O(1)

#include<iostream>
int main() {
constexpr int n = 100;
int sumOfSquare = n * (n + 1) * (2 * n + 1) / 6;  // sum of square of first n numbers
int squareOfSum = n * (1 + n) / 2;                // sum of first n numbers
squareOfSum = squareOfSum * squareOfSum;
int difference = squareOfSum - sumOfSquare;
std::cout << difference << 'n';
}

首先,当你在第一个循环中计算平方和时,你在i中求平方,但对于for循环的下一次迭代,值会不同,假设我的值为3,所以在suqaring中i=i*i;i的值变为9,所以在下一次迭代中,增量算子i++实际上会在9中增加,而不是在3中增加,所以尝试在除i之外的其他变量中计算平方,然后在每次迭代中将其添加到sumofsquare中。

第二,当你使用第二个第一个循环来计算平方和时,在完成循环后,内存变量(i(的后端存储了一些值。现在,在第二个循环中,当你计算和的平方时,你没有将i初始化为1,因为我在第一个循环的内存中已经有了一些值了。所以在第二个循环中,将变量(i(初始化为(1(,以便计算从1到100的平方和。

#include<iostream>
using namespace std;
int main()
{
int sumOfSquare = 0; int add=0;
for(int i=1; i<=100; i++)
{
add = i*i;
sumOfSquare += add;
};
int squareOfSum = 0;
for(int i=1; i<=100; i++)
{
squareOfSum +=i;
};
squareOfSum = squareOfSum * squareOfSum;
int difference = squareOfSum - sumOfSquare;
cout<<difference;
}