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

1027. Colors in Mars:13 進制 RGB 轉換

     編輯:關於C++

題目大意

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

轉換邏輯

  1. 對每個顏色分量(0~168),反覆除以 13 取餘,得到 13 進制數字(低位在前)。
  2. 若只得 1 位,補前導 0。
  3. 按紅、綠、藍順序拼接,輸出 #RRGGBB。

代碼實現

#include <cstdio>
#include <vector>
using namespace std;

void print13(int x) {
    vector<int> d;
    if (x == 0) { d.push_back(0); d.push_back(0); }
    else {
        while (x) { d.push_back(x % 13); x /= 13; }
        if (d.size() == 1) d.push_back(0);
    }
    for (int i = d.size() - 1; i >= 0; --i) {
        if (d[i] < 10) printf("%d", d[i]);
        else printf("%c", 'A' + d[i] - 10);
    }
}

int main() {
    int r, g, b; scanf("%d%d%d", &r, &g, &b);
    printf("#"); print13(r); print13(g); print13(b); printf("\n");
    return 0;
}

範例

輸入: 15 43 71
15 = 1*13 + 2 → "12"
43 = 3*13 + 4 → "34"
71 = 5*13 + 6 → "56"
輸出: #123456

複雜度

  • 時間:O(1),固定 3 次除法循環。
  • 空間:O(1)。

注意

  • 輸入上限 168 = 13² - 1,故每分量最多兩位 13 進制數字。
  • 輸出字母必須大寫,單位數補 0。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved