十六进制转十进制
来源:互联网 发布:淘宝店铺线下推广方案 编辑:程序博客网 时间:2024/05/18 20:09
//牛客编程题:十六进制转十进制(多组输入),例如:输入 0xA,输出 10
/*分两步,1)判断标识符“0x”,如果本身输出不合法,无需做转化,2)按
输入十六进制从后往前(低位到高位)依次判断每个字符代表的数值大小,再
乘以16的位数的几次方(相当于十进制,百位千位对应于10的二次和三次方)
直到“0x”处停止,累加输出对应的十进制数*/
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
int AlpToDec(char c)
{//十六进制需要特殊转化的字符
if (c == 'a' || c == 'A'){
return 10;
}
if (c == 'b' || c == 'B'){
return 11;
}
if (c == 'c' || c == 'C'){
return 12;
}
if (c == 'd' || c == 'D'){
return 13;
}
if (c == 'e' || c == 'E'){
return 14;
}
if (c == 'f' || c == 'F'){
return 15;
}
return -1;
}
int HexToDec(string hex)
{
//异常情况
if (hex.length() < 3){
return -1;
}
if (hex[0] != '0' || hex[1] != 'x'){
return -1;
}
//从后往前,依次转化值,累加输出
int sum = 0, bit = 0;
for (int i = hex.length() - 1; i > 1; --i){
if (hex[i] - '0' >=0 && hex[i] - '0'<= 9){
sum += (hex[i] - '0')*pow(16, bit);
bit++;
}
else if (AlpToDec(hex[i])){
sum += AlpToDec(hex[i])*pow(16, bit);
bit++;
}
else{
return -1;
}
}
return sum;
}
int main(int argc, char **argv)
{
vector<string> hexs;
string hex;
while (cin >> hex)
{
hexs.push_back(hex);
}
for (vector<string>::iterator it = hexs.begin(); it != hexs.end(); it++){
int dec = HexToDec(*it);
if (dec < 0){
cout << "error hex num!!" << endl;
}
else{
cout << dec << endl;
}
}
return 0;
}
- Bailian4003 十六进制转十进制【十六进制】
- 十六进制转十进制
- 十六进制转十进制
- 十进制转十六进制
- hta 十六进制转十进制
- 十进制转十六进制 代码
- delphi 十六进制转十进制
- 十进制转十六进制
- 十六进制转十进制函数
- 十六进制转十进制
- 十进制转十六进制
- 十进制转十六进制方法
- 十进制转十六进制
- 十进制转十六进制
- 十六进制转十进制
- 十进制转十六进制
- 十进制转十六进制
- shell 十六进制转十进制
- 未来币-概念介绍-资产、货币、代币
- 深入了解yii2框架
- 利用分类模型学习特征权重
- cmd命令,越爱越喜欢计算机了...
- CGLIB介绍与原理
- 十六进制转十进制
- mybatis多对一,一对多关系配置
- Java内部类的使用小结
- 电容的作用总结
- gdb 使用python源码调试
- ElasticSearch搜索引擎入门
- Arcgis Sever在本机发布服务,服务可以预览,也发布成功,但是在catalog中无法预览,在网页中图层也没有显示。
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(十二)
- 用pycharm调试运行安装在VirtualEnv上的tensorflow