P1143 進位制轉換
阿新 • • 發佈:2021-08-17
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; }