數字翻轉是經典面試題。本文提供兩種方法:直觀的「逐位剝離法」與模組化的「位數計算法」,並分析其優缺點與適用場景。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, result = 0;
scanf("%d", &n);
while (n != 0) {
int digit = n % 10; // 取最低位
result = result * 10 + digit; // 累加到結果
n /= 10; // 去掉最低位
}
printf("翻轉後的數字:%d\n", result);
return 0;
}
原理:利用取餘(%10)獲取個位數,除以 10 捨去個位,結果乘 10 往左移位再加新數字。時間 O(log n),空間 O(1)。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 取得整數位數
int getWei(int num) {
int wei = 0;
for (int tmp = num; tmp != 0; tmp /= 10) wei++;
return wei;
}
// 計算 10 的 n 次方
int pow10(int n) {
int res = 1;
while (n--) res *= 10;
return res;
}
int main() {
int num, result = 0;
scanf("%d", &num);
int wei = getWei(num);
for (int i = 0; i < wei; i++) {
int digit = (num / pow10(i)) % 10; // 由低位到高位取數
result += digit * pow10(wei - 1 - i); // 放到對應高位
}
printf("翻轉結果:%d\n", result);
return 0;
}
設計亮點:
getWei、pow10 等可複用模組| 維度 | 方法一 | 方法二 |
|---|---|---|
| 可讀性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 程式碼長度 | 極短 | 較長 |
| 擴充性 | 低 | 高(模組化) |
| 面試推薦 | 快速解題首選 | 展示架構能力 |
INT_MAX 需用 long long 或字串處理掌握兩種思維,既能快速解題,又能在系統設計中靈活套用模組化原則。