为什么我的代码返回了错误的平方值?C++
Why is my code returning the wrong value for squaring? C++
到目前为止,这是我的代码,但答案是不正确的。我做错了什么?我应该找出平方和和前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;
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为"adjacent"变量赋值时出现问题
- HEX值到wchar_t字符(UTF-8)的转换
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 数组索引的值没有增加
- std::向量与传递值的动态数组
- 使用指针从C++中的数组中获取最大值
- "co_yield"是否可以在恢复协程时从调用方返回值?
- 通过 C++ 中的指针将子对象值传递给被调用方类
- 错误 C4716"当事方::运算符+":必须返回一个值
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 为什么当数组作为调用方函数中的参数传递时,不能在被调用函数中使用 foreach 循环打印数组的值
- 我在计算 4 个值的方差时的错误在哪里
- 如何使用 std::auto_ptr 实现协方差赋值
- 函数的调用方如何知道是否使用了返回值优化
- 如果要用被调用方构造对象,是否应该移动该值?
- 如何在C++或Java中计算方差、中值和标准差
- 如何在 sip 呼叫中的呼叫方和被叫方之间共享 RTP 的 ssrc 值?
- 修改按值传递的参数对调用方的变量没有影响