(蓝桥杯)基础练习 十六进制转十进制

该博客介绍了一个C++程序,用于将不超过8位的十六进制数字符串转换为十进制数。程序首先将十六进制数转换为二进制,然后将二进制数转换为十进制,最后输出结果。示例中,输入'FFFF',输出65535。注意在转换过程中需要使用unsigned或longlong类型来避免整数溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源限制

时间限制:1.0s   内存限制:512.0MB

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

解题思路:先转化为二进制,再计算。

注意:int 型不能满足 FFFFFFFF 的需求,得用 unsigned 或者 long long 

#include<stdio.h>
#include<iostream> 
#include<vector>
#include<stdlib.h>
#include<string>
#include<math.h>
using namespace std;

string ToChangeBin(string str,vector<string> binList){     //十六转二
	string bin;
	const char *m = str.data();
	for(int i = 0;i <= str.length()-1;i++){
		if(str.at(i)=='0') bin.append(binList.at(0));
		if(str.at(i)=='1') bin.append(binList.at(1));
		if(str.at(i)=='2') bin.append(binList.at(2));
		if(str.at(i)=='3') bin.append(binList.at(3));
		if(str.at(i)=='4') bin.append(binList.at(4));
		if(str.at(i)=='5') bin.append(binList.at(5));
		if(str.at(i)=='6') bin.append(binList.at(6));
		if(str.at(i)=='7') bin.append(binList.at(7));
		if(str.at(i)=='8') bin.append(binList.at(8));
		if(str.at(i)=='9') bin.append(binList.at(9));
		if(str.at(i)=='A') bin.append(binList.at(10));
		if(str.at(i)=='B') bin.append(binList.at(11));
		if(str.at(i)=='C') bin.append(binList.at(12));
		if(str.at(i)=='D') bin.append(binList.at(13));
		if(str.at(i)=='E') bin.append(binList.at(14));
		if(str.at(i)=='F') bin.append(binList.at(15));
		
	}
	return bin;
}

long long int ToChange10(string str){   //二 转 十 
	long long int oct=0;   //特别注意 long long int 开到最大
	int len = str.length();
	int p = len-1;
	string s(str.rbegin(),str.rend());//逆序 
	for(int i = 0;i < len;i++){
		if(s.at(i) == '1') oct += pow(2,i);
	}
	return oct;
}


int main(){
	vector<string> str;
	vector<string> BinaryList;
	BinaryList.push_back("0000");
	BinaryList.push_back("0001");
	BinaryList.push_back("0010");
	BinaryList.push_back("0011");
	BinaryList.push_back("0100");
	BinaryList.push_back("0101");
	BinaryList.push_back("0110");
	BinaryList.push_back("0111");
	BinaryList.push_back("1000");
	BinaryList.push_back("1001");
	BinaryList.push_back("1010");
	BinaryList.push_back("1011");
	BinaryList.push_back("1100");
	BinaryList.push_back("1101");
	BinaryList.push_back("1110");
	BinaryList.push_back("1111");

	string x;        
	getline(cin,x);	
	if(x.length() > 8) return 0;
	string t = ToChangeBin(x,BinaryList);
	long long int oct = ToChange10(t);
	cout<<oct<<endl;

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值