编写一个函数,输入一个十六进制整数并输出相应的十进制数。注意负整数。其中,十六进制数中的A、B、C、D、E、F分别代表十进制数中的10、11、12、13、14、15。
输入格式:
输入十六进制数n(不超过7位)。
输出格式:
输出n相应的十进制数。
输入样例:
AA51
-FFFF
F1B2
输出样例:
43601
-65535
61874
感觉写的有点复杂 qwq。
#include <iostream>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
const int maxn=1e9+10;
typedef long long ll;
int isprime(ll num){
if(num<=1) return 0;
for(int i=2;i*i<=num;i++){
if(num%i==0) return 0;
}
return 1;
}
int n,cnt=0,flag=0;
int main() {
string s;
double sum=0;
map<char,int> mp;
mp['A']=10;
mp['B']=11;
mp['C']=12;
mp['D']=13;
mp['E']=14;
mp['F']=15;
while(cin>>s){
int sum=0;
int len=s.length();
if(s[0]=='-'){
cout << "-";
for(int i=1;i<len;i++){
if(s[i]>='A'&&s[i]<='F') sum+=mp[s[i]]*pow(16,(double)len-1-i);
else sum+=(s[i]-'0')*pow(16,(double)len-1-i);
}
cout << sum<<endl;
}
else{
for(int i=0;i<len;i++){
if(s[i]>='A'&&s[i]<='F') sum+=mp[s[i]]*pow(16,(double)len-i-1);
else sum+=(s[i]-'0')*pow(16,(double)len-i-1);
}
cout << sum<<endl;
}
}
return 0;
}