蓝桥杯 试题 基础练习 十六进制转十进制

本文介绍了一种从十六进制数转换到十进制数的方法,通过先将十六进制转换为二进制,再由二进制转换为十进制的过程。提供了详细的步骤和C++代码实现。

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

问题描述

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

样例输入

FFFF

样例输出

65535

 

思路分析

很简单的一道题,首先十六进制转换成二进制,然后二进制转换成十进制。

十六进制转换成二进制:可以用数组或者map存储转换进制的规则,然后循环遍历把结果存在一个字符串里面。

二进制转换成十进制:逆序字符串,从第一个开始算起。二进制的第i位的基=十进制的2的i次幂

AC代码如下:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<string>
#include<cmath>
using namespace std;

void sto2(string s){
	map<string,string> a;
	a["0"]="0000";
	a["1"]="0001";
	a["2"]="0010";
	a["3"]="0011";
	a["4"]="0100";
	a["5"]="0101";
	a["6"]="0110";
	a["7"]="0111";
	a["8"]="1000";
	a["9"]="1001";
	a["A"]="1010";
	a["B"]="1011";
	a["C"]="1100";
	a["D"]="1101";
	a["E"]="1110";
	a["F"]="1111";
	string b;
	for(int i=0;i<s.length();i++)//十六进制转换成二进制 存在b里面 
	{
		string c;
		c+=s[i];
		b+=a[c];
	}	
	while(b[0]=='0')//去前面的0	
		b.erase(0,1);
	string ss(b.rbegin(),b.rend());//逆序 
	long long ans=0; 
	for(int i=0;i<ss.length();i++)//二进制转换成十进制 
		ans+=(ss[i]-'0')*pow(2,i);
	cout<<ans<<endl;
}
int main(){
	string s;
	string ss="0";//因为有去0的操作,所有如果只是一个0的话,就直接输出。 
	cin>>s;
	if(s==ss)
		cout<<s<<endl;
	else
		sto2(s);
	
} 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wonder-King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值