我有这个函数可以生成指定数量的所谓“三角形数”。如果我打印出双端队列后缀,数字会增加,向下跳,然后再次增加。随着 i 的上升,三角形的数字永远不会变低,所以一定会发生某种溢出。如果结果溢出,我尝试通过添加行if(toPush > INT_MAX) return i - 1;
来尝试阻止函数生成更多数字(并返回它生成的数字)来修复它。但是,这不起作用,输出仍然不正确(增加一段时间,跳到较低的数字,然后再次增加)。我添加的行实际上似乎根本没有做任何事情。未达到退货。有谁知道这里发生了什么?
#include <iostream>
#include <deque>
#include <climits>
int generateTriangleNumbers(std::deque<unsigned int> &triangleNumbers, unsigned int generateCount) {
for(unsigned int i = 1; i <= generateCount; i++) {
unsigned int toPush = (i * (i + 1)) / 2;
if(toPush > INT_MAX) return i - 1;
triangleNumbers.push_back(toPush);
}
return generateCount;
}