演算法要求
給定乙個 32 位有符號整數,將整數中的數字進行反轉。
給定乙個 32 位有符號整數,將整數中的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^31, 2^31 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。
其實僅僅反轉整數很簡單:將整數除以10取餘,得到個位數,個位數變高位數,迴圈直到全部轉化過來(下面會上**,簡單粗暴)。
public
intreverse(int x)
return rev;
}
但是,當這個整數過大的時候,反轉會造成整數溢位,這點很容易被我們忽視(反正我是忽視了,我太菜,上邊是我一開始寫的),我們知道,int的取值範圍是 [−2^31, 2^31 − 1],也就是integer.max_value = 2^31-1 = 2147483647
integer.min_value = -2^31 = -2147483648
上面**只有 rev*10 + c 會造成溢位,而且造成溢位只有兩種情況:
第一: rev*10 + c > max_value
也就是 rev >= max / 10
1. 當rev > max/10時
2. 當rev = max/10 且 c>7
第二:rev*10 + c < min_value
也就是 rev <= min/10
1. 當rev < min/10時
2. 當rev = min/10 且 c < -8
綜上:所以要在rev = rev*10 + c前加上判斷條件,所有我又改了**, **如下:
public int
reverse(int
x)
if (rev < integer.min_value/10 || (rev == integer.min_value / 10 && pop
< -8))
rev = rev * 10 + pop;
}return rev;
}
這樣就解決了整形溢位的問題
ending~~~~~~
演算法 整數反轉
題目 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如...
演算法 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...
swift演算法 整數反轉
描述 給出乙個32位的有符號整數,你需要將這個整數中美位上的數字進行反轉 例1 輸入 123 輸出 321 例2 輸入 123 輸出 321 例3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 即 2147483648,2147...