蓝桥杯 P0102 C++算法提高 HERODING的蓝桥杯之路

资源限制
时间限制: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;
}

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/107364840