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