Ingrese una cadena que termine con #. Esta pregunta requiere filtrar todos los caracteres no hexadecimales (que no distinguen entre mayúsculas y minúsculas) para formar una nueva cadena que represente números hexadecimales y luego convertirla en un número decimal. Si el carácter "-" existe antes del primer carácter hexadecimal, significa que el número es negativo.
Formato de entrada:
ingrese una cadena no vacía que termine con # en una línea.
Formato de
salida : muestra el número decimal convertido en una línea. Se garantiza que el problema se generará dentro del rango de números enteros largos.
Muestra de entrada:
± P-xf4 ± 1! #
Muestra de
salida : -3905
colección de títulos portal de obras completas
#include <stdio.h>
#include <string.h>
#include <ctype.h> //包含toupper()函数
int main()
{
char c[100], ch[100] = {
'\0' };
int j, sum, n;
j = sum = 0;
gets(c);
for (int i = 0; i < strlen(c); i++)
{
if (c[i] == '#')
break;
else if (c[i]=='-'||c[i] >= '0' && c[i] <= '9' || toupper(c[i]) >= 'A' && toupper(c[i]) <= 'F')
{
ch[j] = c[i];
j++;
}
}
for (int i = 0; i < strlen(ch); i++)
{
if (ch[i] != '-')
{
if (ch[i] >= 'A' && ch[i] <= 'F')
n = ch[i] - 'A' + 10;
else if (ch[i] >= 'a' && ch[i] <= 'f')
n = ch[i] - 'a' + 10;
else
n = ch[i] - '0';
sum = sum * 16 + n;
}
}
if (ch[0] == '-' && sum != 0)
printf("-%d", sum);
else
printf("%d", sum);
return 0;
}