反轉整數演算法

2021-08-22 10:29:47 字數 1501 閱讀 4426

演算法要求

給定乙個 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...