Leetcode - 7.整數翻轉

題目地址
不知道什麼叫整數溢出,看了別人的博客才知道,
就是運算過程中超出了實際32位有符號整數位最大的值和最小值
然後就複製了別人的這樣一行代碼

if( rlt>0x7fffffff || rlt<(signed int)0x80000000)
	return 0;

到了 1534236469 這個數就不行。debug發現原來是編譯器在計算時發現溢出了自動重新設置了個數
發現這個數時無規律的(可能有,反正就是正確的不一樣)。
於是根據自己的算法每次都要加x%10,每次加的結果rlt求餘–>若是和前一步x求的餘數不一樣則說明發生了溢出
至此解決。也不用加前面的那行代碼。下面是代碼,20ms

int reverse(int x) {
    int rlt = 0;
    int i = 1;
    if(x == 0)
        return 0;
    while(x!=0){
        rlt = x%10+rlt*10;
        if(rlt%10!=x%10)
        	return 0;
		x = x/10;
        i++;
    }
    return rlt;
}

----------------------------整數溢出知識待補充-------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章