题目原文
题目描述
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入
输入在一行中给出一个以#结束的非空字符串。
输出
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
样例
输入样例1
+-P-xf4+-1!#
输出样例1
-3905
AC代码
#include <stdio.h>
#include <ctype.h>
int main()
{
char ch;
int mark = 1, flag = 0, ans = 0;
while (scanf("%c", &ch) && ch != '#')
{
if (flag == 0 && ch == '-')
mark = -1;
if (!isxdigit(ch))
continue;
flag = 1;
if (isdigit(ch))
ans = 16 * ans + ch - '0';
else if (isupper(ch))
ans = 16 * ans + ch - 'A' + 10;
else if (islower(ch))
ans = 16 * ans + ch - 'a' + 10;
}
printf("%d", mark * ans);
return 0;
}