天天看點

藍橋杯 算法提高 ADV-239 P0102 進制轉換

算法提高 P0102

時間限制:1.0s 記憶體限制:256.0MB

  使用者輸入三個字元,每個字元取值範圍是0-9,A-F。然後程式會把這三個字元轉化為相應的十六進制整數,并分别以十六進制,十進制,八進制輸出,十六進制表示成3位,八進制表示成4位,若不夠前面補0。(不考慮輸入不合法的情況)

輸入

  1D5

輸出

(注意冒号後面有一個空格)

  Hex: 0x1D5

  Decimal: 469

  Octal: 0725

思路:

  輸入的本身就是16進制,是以輸出的16進制數隻需要在前面輸出個0x即可。

  16進制轉10進制輸出沒什麼好說的,該是多少就輸出多少,至于進制轉換,我想大家都是會的,前面基礎練習的時候我們都做過。

  輸出8進制的時候,有一個前面填充0的問題需要注意,C++中控制輸出寬度的函數是setw(4),控制前面填充字元的是setfill(‘0’);

 

如果有進制轉換不會的朋友,也可以借鑒以下,代碼如下:

#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;

//16進制轉10進制
int Doc(char *str)
{
	int num = 0;
	char ch;
	while(*str)
	{
		ch = *str;
		if(ch>='0' && ch<='9')
			num = num*16+ch-'0';
		else
			num = num*16+10+ch-'A';
		str++;
	}
	return num;
}

//10進制轉8進制
string Oct(int num)
{
	string temp;
	while(num > 8)
	{
		temp.insert(temp.begin(), num % 8 + '0');
		num /= 8;
	}
	temp.insert(temp.begin(), num + '0');
	return temp;
}

int main()
{
	char str[4];
	int num;
	
	cin >> str;
	num = Doc(str);
	
	cout << "Hex: 0x" << str << endl;
	cout << "Decimal: " << num << endl;
	cout << "Octal: " << setw(4) << setfill('0') << Oct(num) << endl;
	
	return 0;
}
           

繼續閱讀