LeetCode刷題筆記 7
阿新 • • 發佈:2018-11-26
題目:
給定32位有符號整數,翻轉整數的數字。例:123—>321(溢位則返回0)
我的答案:
int reverse(int x) { int a[10], b[11]; int i,j,flag = 0; long long out = 0; b[0] = abs(x); for (i = 0; i < 10; i++) { a[i] = b[i] / (pow(10,(9 -i ))); b[i + 1] = b[i] % (int)(pow(10,(9 - i))); if (a[i] > 0 && flag == 0) { j = i; flag = 1; } } for (i = j; i < 10; i++) { out += a[i] * (pow(10,i-j)); } if (x < 0) out = -out; if (out >= (pow(2,31)) || out < (pow(-2,31))) out = 0; return out; }
錯誤歷史:
- 執行出錯:
C語言沒有冪次,只能用pow()函式,且pow()函式使用且返回double型別 - 第一次提交:
out += a[i] * (pow(10,i-j)); 語句沒有考慮到位,邏輯沒有縷通順 - 第二次提交:
溢位問題。out溢位後才進行判斷。 - 第三次提交:
成功
其餘需要注意的地方
Long和int都為32位,long long為64位
答案:
class Solution { public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0; rev = rev * 10 + pop; } return rev; } };