我有這個功能,它可以生成所謂的「三角形數字」的指定數量。如果我打印出後綴,則數字會增加,跳下來,然後再次增加。當我上升時,三角形數字永遠不會變低,所以一定會發生某種溢出。我試圖通過添加行if(toPush > INT_MAX) return i - 1;
來嘗試修復它,以便在結果溢出時嘗試停止生成更多數字的函數(並返回它生成的數字)。然而,這不起作用,輸出繼續不正確(增加一段時間,跳到一個更低的數字,然後再次增加)。我添加的這條線實際上並沒有做任何事情。沒有達到收益。有人知道這裏發生了什麼嗎?像unsigned int溢出一樣表現。是什麼造成的?
#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;
}
我無法工作的第一個價值是什麼?如果您手動進行特定計算,您觀察到了什麼? – 2013-03-08 09:47:06
您如何期待任何數字嚴格大於最大數目? – Mat 2013-03-08 09:47:47
你應該檢查你的計算的各個步驟。具體來說,如果溢出發生在'(i *(i + 1))'中,那麼之後就不能檢測到它。 – 2013-03-08 09:49:27