解題說明
Base 7
題目描述:給定一個整數 num,回傳它的 7 進位字串表示。
解題思路:模擬進位轉換:反覆對 7 取餘數得到當前最低位,再除以 7 移除該位,直到數字為 0。需要特別處理三個邊界:① num == 0 直接回傳 "0";② 負數:先記下符號,取絕對值後轉換,最後在結果前加 "-";③ 由於餘數是從低位到高位取得的,最後需要反轉字串。
C++ 解法
複雜度分析
時間複雜度:O(log₇ n) — 每次迭代將 n 除以 7,最多執行 log₇(|num|) 次。
空間複雜度:O(log₇ n) — 結果字串的長度與位數成正比。
虛擬碼
1. If num == 0, return "0" 2. Record sign, set num = abs(num) 3. While num > 0: a. Append (num % 7) as char to result b. num = num / 7 4. If negative, append '-' 5. Reverse result 6. Return result
其他解法
遞迴法:if (num < 0) return "-" + convert(-num); if (num < 7) return to_string(num); return convert(num/7) + to_string(num%7); — 遞迴從高位到低位構建,不需反轉,但有呼叫堆疊開銷。
內建函式:某些語言有進制轉換的標準函式(如 Python 的 format(num, 'o') 用於 8 進位,或用 int(x, base) 反向轉換),C++ 沒有對應的直接支援。
延伸思考
- 如何修改程式以支援任意進制
base(2 到 36)?當 digit >= 10 時如何用字母 a–z 表示? - 將 7 進位字串轉回 10 進位整數,需要哪些步驟?
- 為什麼負數轉進制時先取絕對值再加符號,而不是直接對負數取模?(考慮不同語言的模運算行為)