我输入123ywd的时候输出答案是错的;而输入123ydw的时候输出是正确的
我试过发现好像是每输入连续两个非十六进制字符的时候会保留后一个字符,但是我不知道怎么修改,请问这个问题怎么修改?
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{char a[80];
int i,j,t;
int s=0;
scanf("%s",a);
for(i=0;i<80;i++)
{
if((!(a[i]>='0'&&a[i]<='9'))&&(!(a[i]>='A'&&a[i]<='F'))&&(!(a[i]>='a'&&a[i]<='f')))
{
for(j=i;j<strlen(a);j++)
{
a[j]=a[j+1];
}
j--;
}
}
s=0;
for(j=0;j<strlen(a);j++)
{
if(a[j]>='A'&&a[j]<='F')
{
a[j]=(int)(a[j]-'A')+10+'0';
}
if(a[j]>='a'&&a[j]<='f')
{
a[j]=(int)(a[j]-'a')+10+'0';
}
}
for(int t=0;t<strlen(a);t++)
{
s=s*16+(a[t]-'0');
}
printf("%d",s);
return 0;
}
删除数组数据后,数组长度应该-1
其实,没必要删去数组元素
可以直接选取属于16进制的数进行运算
#include<stdio.h>
int main()
{
char a[80];
int i,j;
int s=0;
scanf("%s",a);
for(i=0;i<80;i++)
{
if(a[i]>='0'&&a[i]<='9')
s=s*16+a[i]-'0';
else if(a[i]>='A'&&a[i]<='F')
s=s*16+a[i]-'A'+10;
else if(a[i]>='a'&&a[i]<='f')
s=s*16+a[i]-'a'+10;
}
printf("%d",s);
return 0;
}