火星人用 13 進制(0-9, A-C)表示顏色,格式為 6 位數:前 2 位紅、中 2 位綠、後 2 位藍。給定三個十進制色值(0-168),輸出火星 RGB 格式(如 #123456)。
每個色值範圍 0-168(< 13²=169),轉為兩位 13 進制數:
#includevoid print_digit(int d) { // 輸出單個 13 進制數字 if (d <= 9) putchar('0' + d); else putchar('A' + d - 10); } void print_color(int v) { // 輸出兩位 13 進制 if (v >= 13) { print_digit(v / 13); print_digit(v % 13); } else { putchar('0'); print_digit(v); } } int main() { int r, g, b; scanf("%d%d%d", &r, &g, &b); putchar('#'); print_color(r); print_color(g); print_color(b); putchar('\n'); return 0; }
| 要點 | 說明 |
|---|---|
| 進制基數 | 13(0-9, A-C),非常見 16 進制 |
| 輸入範圍 | 0-168,保證兩位 13 進制足夠表示 |
| 輸出格式 | 以 # 開頭,6 位大寫字符,不足兩位補 0 |
| 邊界情況 | 0 → 00,168 → CC (12*13+12) |
#includeusing namespace std; string to_base13(int v) { string digits = "0123456789ABC"; string res; for (int i = 0; i < 2; ++i) { res = digits[v % 13] + res; v /= 13; } return res; } int main() { int r, g, b; cin >> r >> g >> b; cout << '#' << to_base13(r) << to_base13(g) << to_base13(b) << '\n'; }
本題純進制轉換,關鍵識別 13 進制、兩位固定寬度、大寫輸出。代碼極短,考察基礎進制轉換邏輯與格式控制。面試中可擴展:任意進制轉換、負數處理、大數進制轉換等。