蓝桥杯备战-十六进制转为十进制
来源:互联网 发布:淘宝的花呗怎么开通 编辑:程序博客网 时间:2024/05/17 02:11
十六进制:0~9,A~F;
十进制:0~9;
思路:位权展开法;
例如:十六进制化为十进制的例子:十六进制37 3*·16^1+7*16^0=55,则十进制为55;
现在分两种情况:(1)十六进制为0~9范围内时,设将ASCII值存在数组a[i]里,将ASCII值化为数字:a[i]-'0'...........................................①
再用①*pow(16,len-1-i)得数字;
(2)十六进制为A~F时,设将ASCII值存在数组a[i]里,将ASCII值化为数字:a[i]-'A'+10................................................②
再用②*pow(16,len-i-1)得数字。
题目:问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
思路:其实刚开始做这题时,我受上一题的影响,想用switch来列举,直接的出答案,可惜太天真了!
真正思路:用位权展开法:如十六进制数为:5A4C转换为十进制的方法是,位权展开法:5*16的3次方+A*16的2次方+4*16的1次方+C*16的0次方
其中用到一个函数幂函数pow(16,len-1-i);还用带字符string文件;
代码如下:
#include<iostream>
#include<cmath> //pow函数用到:是幂函数
#include<cstring> //strng函数:字符用到
using namespace std;
int main()
{
string hex; //存原十六进制
long long dec = 0;
cin>>hex;
int len = hex.length();
for(int i=0 ;i<len;i++)
{
if(hex[i] >= 'A')
{
dec += (hex[i] - 'A' + 10)*pow(16,len-1-i); // 将字母转换成数字
}
else
{
dec += (hex[i] - '0')*pow(16,len-1-i); //将字母转换成数字
}
}
cout<<dec;
return 0;
}
注释:hex[i] - 'A' + 10的理解:10 的十六进制是 A A - A + 10 = 10,15 的十六进制是 F F - A + 10 = 15
hex[i] - '0'的理解为:hex[i] 这里面存的是字符型的数字。。。 在ASCII码里‘1’-‘0’ASCII码 就是 1 ,
2’的 ASCII码 50 ‘0’的是 48 相减就是2;
开始提交时正确率一直不能达到100%,检查了代码并没有问题,然后百度了一些别人的一些做法,原来是定义的数据范围不够。8个十六进制数对应的十进制数应该用long long类型变量来表示。
以上是借鉴别人的,在加上自己的一些见解,希望对自己与他人有帮助!
- 蓝桥杯备战-十六进制转为十进制
- 十六进制转为十进制
- 十进制转为十六进制
- 十进制转为三十六进制
- 十进制转为十六进制
- 十进制转为十六进制
- 十进制转为十六进制
- 十进制转为十六进制
- 十六进制转为十进制
- 二进制、八进制、十六进制 转为 十进制
- 十进制数转为十六进制字符串
- c语言将十六进制转为十进制
- Objective-C十六进制字符串转为十进制
- 1.1进制转换:十进制转为十六进制
- 15电气徐立立(十进制转为十六进制)
- 蓝桥杯 十进制转十六进制
- 蓝桥杯-十进制转十六进制
- 蓝桥杯-十六进制转十进制
- 让Hyper-V和VMware虚拟机软件共存
- 黑马程序员-字节流File读写操作_拷贝图片-mp3_自定义字节缓冲区
- 数组中三个只出现一次的数字
- 最长公共子串
- 使用命令行编译 Objective C 的一些常用参数
- 蓝桥杯备战-十六进制转为十进制
- 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
- 人生
- python gevent install on windows 安装
- 国庆假期学习html的一些心得
- poj 3463 dijkstra变形(求最短路和次短路的数量)
- 学习总结
- GIS(七)——js版搜狗地图搜索功能美化版
- jar包