1. 程式人生 > 其它 >P1143 進位制轉換

P1143 進位制轉換

題目傳送門

C++程式碼

#include <bits/stdc++.h>

using namespace std;

//單個字母轉換成數字 0-F
int char_to_int(char a) {
    return '0' <= a && a <= '9' ? a - '0' : 10 + a - 'A';
}

//0-15之間的數字轉為16進位制的數字
char int_to_char(int a) {
    return a <= 9 ? '0' + a : a - 10 + 'A';
}

int n;          //原始的n進位制
int m;          //要轉換成的m進位制
string input;   //輸入的原始數字

int d;          //原始數轉為十進位制的數字是多少,這是一箇中間過程
vector<int> output; //用一個數字陣列

/**
 * 測試用例:
 16  FF  2
 答案: 11111111

 測試用例2:
 15 5CBD1460 2
 答案:
 111011100110101100100111110110
 */
int main() {
    //題意:將輸入的n進位制數input轉為m進位制
    cin >> n >> input >> m;

    //原數轉換為十進位制,從左向右噢
    for (int i = 0; i < input.size(); i++)//遍歷輸入字串的每一位,一邊轉每一位是十進位制,一邊乘n,累加,得到換算後的十進位制數。
        d = d * n + char_to_int(input[i]);//秦九韶演算法,就是迭代方式提高效率

    //輸出測試一下:255
    //cout << d << endl;

    //將十進位制數轉換為m進位制數的每一位是多少
    while (d) output.push_back(d % m), d /= m;//一路取餘儲存,得到一個反向的數字序列。學習這種靜態陣列+idx的用法,很好用,速度快。

    //轉換好的數字,按m進位制數的標準樣式輸出
    for (int i = output.size() - 1; i >= 0; i--) cout << int_to_char(output[i]);
    return 0;
}