基础练习 十六进制转十进制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<vector>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define ms(a,b) memset(a,b,sizeof(a))
#define ll long long
#define pi acos(-1.0)
const int M=1e5+10;
int i,j,k,n,m;
char s[100100];
int T[400400];
int E[200200];
int main()
{
while(~scanf("%s",s)){
k=0;
ms(T,0);
ms(E,0);
for(i=0;i<strlen(s);i++){
switch(s[i]){
case '0':{T[k++]=0;T[k++]=0;T[k++]=0;T[k++]=0;}break;
case '1':{T[k++]=0;T[k++]=0;T[k++]=0;T[k++]=1;}break;
case '2':T[k++]=0;T[k++]=0;T[k++]=1;T[k++]=0;break;
case '3':T[k++]=0;T[k++]=0;T[k++]=1;T[k++]=1;break;
case '4':T[k++]=0;T[k++]=1;T[k++]=0;T[k++]=0;break;
case '5':T[k++]=0;T[k++]=1;T[k++]=0;T[k++]=1;break;
case '6':T[k++]=0;T[k++]=1;T[k++]=1;T[k++]=0;break;
case '7':T[k++]=0;T[k++]=1;T[k++]=1;T[k++]=1;break;
case '8':T[k++]=1;T[k++]=0;T[k++]=0;T[k++]=0;break;
case '9':T[k++]=1;T[k++]=0;T[k++]=0;T[k++]=1;break;
case 'A':T[k++]=1;T[k++]=0;T[k++]=1;T[k++]=0;break;
case 'B':T[k++]=1;T[k++]=0;T[k++]=1;T[k++]=1;break;
case 'C':T[k++]=1;T[k++]=1;T[k++]=0;T[k++]=0;break;
case 'D':T[k++]=1;T[k++]=1;T[k++]=0;T[k++]=1;break;
case 'E':T[k++]=1;T[k++]=1;T[k++]=1;T[k++]=0;break;
case 'F':T[k++]=1;T[k++]=1;T[k++]=1;T[k++]=1;break;
}
}
ll sum=0;
int kk=0;
for(i=k-1;i>=0;i--){
sum+=T[i]*pow(2,kk);
kk++;
}
printf("%lld\n",sum);
}
return 0;
}