一道十六进制转换为十进制的题目,一直wrong answer,但是自己测试不出错误,求哪位大佬来帮忙看一下,万分感谢啊!
把一个长度为n ( 0 < n < 80 )的字符串过滤所有的非十六进制字符后,组成一个新的字符串(十六进制形式),然后将其转换为十进制数输出。Input
有多个测试用例,每个测试用例占一行。
Output
对每个测试用例,输出一个十进制整数结果。如果字符串中不含十六进制数字字符,则输出0。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[80];
while(gets(a))
{
char b[80]={};
int i,j=0;
for(i=0;a[i];i++)
{
if(a[i]>='a'&&a[i]<='f'||a[i]>='A'&&a[i]<='F'||a[i]>='0'&&a[i]<='9'){
b[j]=a[i];
j++;
}
}
int w=strlen(b),q;
unsigned long long t,sum=0;
for(j=w-1;j>=0;j--){
t=1;
for(int k=1;k<=w-1-j;k++){
t=t*16;
}
if(b[j]>='0'&&b[j]<='9')
sum=sum+t*(b[j]-'0');
else{
if(b[j]=='a'||b[j]=='A')q=10;
if(b[j]=='b'||b[j]=='B')q=11;
if(b[j]=='c'||b[j]=='C')q=12;
if(b[j]=='d'||b[j]=='D')q=13;
if(b[j]=='E'||b[j]=='E')q=14;
if(b[j]=='f'||b[j]=='F')q=15;
sum=sum+t*q;
}
}
printf("%lld\n",sum);
}
}
求问错误在哪里?困扰好久了,一直找不出。。。