# 題目: UVa 389 - Basically Speaking

# 題目說明

給一串數字,並告訴你它是 n 進位的數字,將它轉為 m 進位的數字,並遵守以下規則:

  1. 有 7 位數的輸出,超過以 ERROR 表示
  2. 使用數字 0 - 9 與字母 A - F
  3. nm 的範圍為 2 - 16

INPUT:
每筆資料輸入 1 個字串、兩個整數 nm


OUTPUT:
輸出轉換過後的數字,7 位數為限,並向右靠齊

# 解題方法

  1. 先將 n 進位的數字轉為 10 進位
    (使用一個基底 div = 1 ,從個位開始,每向前一位 div * n )
  2. 將 10 進位的數字轉為 m 進位
  3. 最後分別處理超過 7 位及 0 位的情況

# 參考程式碼

#include <iostream>
using namespace std;
int main()
{
	// fast io
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	string str;
	int n, m;
	while (cin >> str >> n >> m)
	{
		int _10 = 0;
		string ans;
		// turn the base n to decimal		
		for (int i = str.size() - 1, div = 1; i >= 0; --i, div *= n)
		{
			if (str[i] <= '9') _10 += (str[i] - '0') * div;
			else _10 += (str[i] - 'A' + 10) * div;
		}
		// turn decimal to base m
		while (_10 > 0)
		{
			if (_10 % m < 10) ans.push_back(_10 % m + '0');
			else ans.push_back(_10 % m -10 + 'A');
			_10 /= m;
		}
		if (ans.size() > 7) cout << "  ERROR";
		else
		{
			if (ans.empty()) ans.push_back('0');
			int sp = 7 - ans.size();
			while (sp-- != 0) cout << " ";
			for (int i = ans.size() - 1; i >= 0; --i) cout << ans[i];
		}
		cout << "\n";
	}
	return 0;
}