算法提高 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;
}