反轉 32 位有符號整數。溢出返回 0。例:123→321, -123→-321, 120→21。
INT_MAX = 2,147,483,647。反轉過程中,若 result > INT_MAX/10 或 result == INT_MAX/10 且 pop > 7 則溢出。負數轉正處理,注意 -2147483648 無法取正(溢出),特判返回 0。
class Solution {
public:
int reverse(int x) {
if (x == INT_MIN) return 0; // -2147483648 無法取正
int sign = x < 0 ? -1 : 1;
long long val = abs((long long)x); // 用 long long 避免 abs(INT_MIN) UB
int result = 0;
while (val) {
int pop = val % 10;
val /= 10;
if (result > INT_MAX/10 || (result == INT_MAX/10 && pop > 7)) return 0;
result = result * 10 + pop;
}
return sign * result;
}
};
int reverse(int x) {
long long res = 0;
while (x) { res = res*10 + x%10; x/=10; }
return (res < INT_MIN || res > INT_MAX) ? 0 : (int)res;
}
現代編譯器優化下 long long 版本同樣高效且更不易出錯。