我有一个函数,它生成指定数量的所谓“三角形数”。如果我在之后打印deque,数字会先增加,然后跳下来,再次增加。三角形数不应该随着i的增长而减小,因此必须发生某种溢出。我尝试通过添加以下代码来修复它:
if(toPush > INT_MAX) return i - 1;
,以尝试防止函数生成更多的数字(并返回它生成的数字),如果结果溢出。然而,这并没有起作用,输出仍然是不正确的(一段时间增加,跳下到较低的数字,然后再次增加)。我添加的代码似乎根本没有起作用,return语句没有被执行。有人知道这里发生了什么吗?#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;
}
(i * (i + 1))
中,之后就无法检测到它了。 - Björn Pollex