---
# System prepended metadata

title: UVA 10473 - Simple Base Conversion
tags: [UVA]

---

UVA 10473 - Simple Base Conversion

題目:

在這個問題中你被要求寫一個程式來做數字基底的轉換。給你一個10進位或16進位的數，請你把他轉換成16進位或10進位的數。16進位的數總是以0x當開頭，其他所有的數都被當成是10進位。輸入中不會有不合法的數。

Input
輸入含有多組測試資料。每組測試資料一列有一個不為負數的數，可能是一個10進位或16進位的數。請根據上述的敘訴判斷。這個數10進位的值一定小於 231 。 若輸入為負的10進位數字時代表輸入結束。請參考 Sample Input。

Output
對每組測試資料輸出一列。如果輸入的是10進位的數，請輸出其16進位的值。如果輸入是16進位的數，請輸出其10進位的值。 如同輸入一樣，輸出的16進位的數也請以 0x 開頭。請參考Sample Output。

Sample Input #1
4
7
44
0x80685
-1

Sample Output #1
0x4
0x7
0x2C
525957

C++ code:

```c++=
#include<bits/stdc++.h>

using namespace std;

int main(){
	//ios::sync_with_stdio(0);cin.tie(0); 
	
	string n;
	while(cin >> n) {
		if (n == "-1") {
			break;
		}
		else if (n.substr(0, 2) == "0x") {
			string ans = n.substr(2);
			istringstream iss(ans);
			int answer;
			if (iss >> hex >> answer) {
				cout << dec << answer << endl;
			}
		}
		else {
			int a = stoi(n);
			if (a > 0) {
				cout << "0x" << hex << uppercase << a << endl;
			}
		}
	}
}
```