int reverse(int n) {
int rev = 0;
while (n != 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
逐位取最低位(n%10),累建結果(rev*10+digit),n/=10 右移。
int digits(int n) {
int d = 0;
for (; n; n/=10) d++;
return d;
}
int pow10(int n) {
int r = 1;
while (n--) r *= 10;
return r;
}
int reverse2(int n) {
int d = digits(n);
int rev = 0;
for (int i=0; i
先算位數,再依位權重組合。邏輯清晰但效率較低(重複計算次方)。
邊界情況處理
- 負數:可先記號、轉正處理、最後恢復號。
- 溢位:反轉後超出
INT_MAX 需檢查或用 long long 中間儲存。
- 尾隨零:
1200 → 21,符合整數語意。
複雜度分析
方法 時間 空間 備註
迭代取餘 O(log₁₀ n) O(1) 單遍歷,工程首選
位權重組 O((log n)²) O(1) 教學展示位數概念