资源限制
时间限制:1.0s 内存限制:256.0MB
用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出,十六进制表示成3位,八进制表示成4位,若不够前面补0。(不考虑输入不合法的情况)
输入
1D5
输出
(注意冒号后面有一个空格)
Hex: 0x1D5
Decimal: 469
Octal: 0725
解题思路:
这题考察的是字符串转成int型的问题,且十六进制输入的字符串有数字字符,也有字母字符,这里要分开判断求解,剩下的就是十进制转八进制的问题,像转成二进制一样,不停地取余数就能得到最后的结果,当然还要注意输出格式,代码如下:
#include<bits/stdc++.h>
using namespace std;
int change(char a[3]){
int dec = 0;
for(int i = 2; i >= 0; i --){
if(a[i] == 'A' || a[i] == 'B' || a[i] == 'C' || a[i] == 'D' || a[i] == 'E' || a[i] == 'F'){
dec += pow(16,2 - i) * (a[i] - 'A' + 10);
}
else{
dec += pow(16,2 - i) * (a[i] - '0');
}
}
return dec;
}
int main(){
char a[3];
scanf("%s", a);
int dec = change(a);
int demo = dec;
int b[4] = {0};
int i = 4;
while((i --) && (demo > 0)){
int res = demo % 8;
b[i] = res;
demo /= 8;
}
cout << "Hex: 0x" << a[0] << a[1] << a[2] << endl;
cout << "Decimal: " << dec << endl;
cout << "Octal: " << b[0] << b[1] << b[2] << b[3] << endl;
return 0;
}