思路:
+-P-xf4+-1!#
-f41
-(15*16^2 + 4*16^1 + 1*16^0^)
-3905
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
char s[81];
int tag=0,t,k=0,head=1; //tag表示正负
long sum=0;
gets(s);
for(int i=0;i<strlen(s);i++){
if(s[i]=='-'&&head) //只有‘-’在十六进制数前出现
tag=1;
else if((s[i]>='A'&&s[i]<='F')||(s[i]>='a'&&s[i]<='f')||(s[i]>='0'&&s [i]<='9'))
{
head=0; //head表示在已经扫描到十六进制数
s[k++]=s[i];
}
}
s[k]='\0';
for(int i=k-1;i>=0;i--){
if(s[i]>='A'&&s[i]<='F'){
t=s[i]-'A'+10;
}
else if (s[i]>='a'&&s[i]<='f'){
t=s[i]-'a'+10;
}
else{
t=s[i]-'0';
}
sum+=(t*pow(16,k-1-i));
}
if(tag){
sum=-sum;
}
printf("%ld\n",sum);
return 0;
}