Geben Sie eine Zeichenfolge ein, die mit # endet. Bei dieser Frage müssen alle nicht hexadezimalen Zeichen (ohne Berücksichtigung der Groß- und Kleinschreibung) herausgefiltert werden, um eine neue Zeichenfolge zu bilden, die hexadezimale Zahlen darstellt, und anschließend in eine Dezimalzahl konvertiert werden. Wenn das Zeichen "-" vor dem ersten Hexadezimalzeichen steht, bedeutet dies, dass die Zahl negativ ist.
Eingabeformat:
Geben Sie eine nicht leere Zeichenfolge ein, die in einer Zeile mit # endet.
Ausgabeformat:
Geben Sie die konvertierte Dezimalzahl in einer Zeile aus. Das Problem wird garantiert innerhalb des langen ganzzahligen Bereichs ausgegeben.
Eingabebeispiel:
± P-xf4 ± 1! #Ausgabebeispiel
:
-3905 Titelsammlung komplettes Werkportal
#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;
}