首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

PAT 1027 Colors in Mars:十進制轉十三進制 RGB 色彩值

     編輯:關於C++

題目背景

火星人用 13 進制(0-9, A-C)表示顏色,格式為 6 位數:前 2 位紅、中 2 位綠、後 2 位藍。給定三個十進制色值(0-168),輸出火星 RGB 格式(如 #123456)。

核心邏輯:十進制轉 13 進制兩位數

每個色值範圍 0-168(< 13²=169),轉為兩位 13 進制數:

  • 高位 = 值 / 13
  • 低位 = 值 % 13
  • 數字 0-9 直接輸出,10-12 輸出 'A'-'C'
  • 若高位為 0 輸出 '0' 補齊兩位

AC 代碼(C)

#include 

void 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)

C++ 版本(利用 iomanip)

#include 
using 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 進制、兩位固定寬度、大寫輸出。代碼極短,考察基礎進制轉換邏輯與格式控制。面試中可擴展:任意進制轉換、負數處理、大數進制轉換等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved