输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
±P-xf4±1!#
输出样例:
-3905
#include <stdio.h>
#include <math.h>
#include <string.h>
int num(char s)
{
if(s=='a'||s=='A')
{
return 10;
}
if(s=='b'||s=='B')
{
return 11;
}
if(s=='c'||s=='C')
{
return 12;
}
if(s=='d'||s=='D')
{
return 13;
}
if(s=='e'||s=='E')
{
return 14;
}
if(s=='f'||s=='F')
{
return 15;
}
}
int main()
{
int i,k=0;
int n;
long int sum=0;
int sumsum=1;
char *p;
char a[80]={0},b[80]={0};
gets(a);
p=a;
while(*p!='#')
{
if((*p>='A'&&*p<='F')||(*p>='a'&&*p<='f')||(*p>='1'&&*p<='9')||(*p=='-'))
{
b[k]=*p;
k++;
}
p++;
}
if(b[0]=='-')
{
sumsum=-1;
}
p=b;
int j=0;
for(i=0;i<k;i++,p++)
{
if((*p>='A'&&*p<='F')||(*p>='a'&&*p<='f')||(*p>='1'&&*p<='9'))
{
b[j]=*p;
j++;
}
}
for(i=j-1;i>=0;i--)
{
if(b[i]>='0'&&b[i]<='9')
{
sum=sum+(b[i]-'0')*pow(16,(j-1)-i);
}
else
{
sum=sum+num(b[i])*pow(16,(j-1)-i);
}
}
printf("%ld\n",sum*sumsum);
return 0;
}
运行结果: