输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。 输入格式: 输入在一行中给出一个以#结束的非空字符串。 输出格式: 在一行中输出转换后的十进制数。题目保证输出在长整型范围内。c语言
时间: 2024-02-26 19:58:07 浏览: 278
以下是 C 语言实现:
```c
#include <stdio.h>
#include <ctype.h>
int main()
{
char c;
long long sum = 0;
int flag = 1; // 标记正负数,默认为正数
while ((c = getchar()) != '#')
{
if (isxdigit(c)) // 判断是否为十六进制字符
{
if (c == '-')
{
flag = -1;
}
else
{
if (isdigit(c))
{
sum = sum * 16 + (c - '0');
}
else
{
sum = sum * 16 + (tolower(c) - 'a' + 10);
}
}
}
}
printf("%lld\n", sum * flag);
return 0;
}
```
程序中使用了 `getchar()` 函数逐个读入字符,使用 `isxdigit()` 函数判断是否为十六进制字符,使用 `isdigit()` 函数判断是否为十进制数字字符。最后将读入的十六进制数转换为十进制数并输出即可。
阅读全文