任务描述
本关任务:输入一个以 # 结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
编程要求
根据提示,在右侧编辑器补充代码,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。
测试说明
输入说明: 输入在一行中给出一个以 # 结束的非空字符串。
输出说明: 在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
平台会对你编写的代码进行测试:
测试输入:+-P-xf4+-1!#
预期输出:-3905
#include<stdio.h>
int main(void)
{
int i=0,k=0,num=0,index=0;
char hex[80],str[80];
while((str[i] = getchar())!='#')
{
i++;
}
str[i] = '\0';
i=0;
while(str[i]!='\0')
{
if(str[i]=='-'&&index==0) index = -1;
if((str[i]>='0'&&str[i]<='9')||(str[i]>='A'&&str[i]<='F')||(str[i]>='a'&&str[i]<='f'))
{
hex[k] = str[i];
k++;
if(index==0)index = 1;
}
i++;
}
hex[k] = '\0';
for(i = 0;hex[i]!='\0';i++)
{
if(hex[i]>='0'&&hex[i]<='9')
{
num = num*16+hex[i] - '0';
}
else if(hex[i]>='A'&&hex[i]<='F')
{
num = num*16+hex[i] - 'A'+10;
}
else if(hex[i]>='a'&&hex[i]<='f')
{
num = num*16+hex[i] - 'a'+10;
}
}
printf("%d",index*num);
return 0;
}