我有一個簡單的方法,基本上反轉有符號整數。該函數一直運行到整數小於或等於32位。 例如: -檢測32位整數溢出
input = 321
output = 123
input = -321
output = -123
input = 1534236469
output = 9646324351 //this value is wrong.
expected output = 0
我要檢測的整數溢出,並在這種情況下返回0。 下面是該函數的代碼
int reverse(int x) {
int number = x;
bool negative = false;
if(number<0){
negative = true;
number *= -1;
}
int reversed = 0;
while (number != 0){
int reminder = number % 10;
reversed = (reversed * 10) + reminder;
number /= 10;
}
if(negative){
reversed *= -1;
}
return reversed;
}
而且,如果我改變輸入和輸出到簽訂長我得到所需要的輸出,但我要檢測的整數溢出並返回0
而當您使用調試器來逐步執行您的這一算法(每次一行)並檢查每個步驟中所有變量的值時,您做了哪些觀察?你的問題的答案是:學習如何使用調試器。瞭解如何使用調試器是每個C++開發人員必備的技能。 –
@SamVarshavchik:不,答案並非如此。當溢出發生時,他希望**檢測**。他需要一個可以做到的算法。 – geza
@SamVarshavchik,謝謝。我通過調試器進行了檢查。溢出發生在乘法中。將有助於瞭解是否有一種簡單的方法來檢測在算術運算情況下數字可能會經歷溢出。 –