任务描述
本关任务:输入一个以 # 结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
编程要求
根据提示,在右侧编辑器补充代码,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。
测试说明
输入说明: 输入在一行中给出一个以 # 结束的非空字符串。
输出说明: 在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
平台会对你编写的代码进行测试:
测试输入:+-P-xf4+-1!#
预期输出:-3905
开始你的任务吧,祝你成功!
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
//=======begin=======
char str[100];
scanf("%s", str);
//过滤非十六进制字符 (1~F) 包括大小写
char hex[100];
int count = 0;
int len = strlen(str);
for (int i = 0; i < len; i++)
{
if ((str[i] >= '0' && str[i] <= '9'))
{
hex[count] = str[i];
count++;
}
else if ((str[i] >= 'a' && str[i] <= 'f'))
{
hex[count] = str[i];
count++;
}
else if ((str[i] >= 'A' && str[i] <= 'F'))
{
hex[count] = str[i];
count++;
}
}
//检查正负号
int jj = -1;
for (int j = 0; j < len; j++)
{
if (str[j] == '-')
{
jj = j;
break;
}
}
int kk = 0;
for (int k = 0; k < len; k++)
{
if ((str[k] >= '1' && str[k] <= '0') || (str[k] >= 'a' && str[k] <= 'f') || (str[k] >= 'A' && str[k] <= 'Z'))
{
kk = k;
break;
}
}
//为负号
int flag = 1;
if (jj < kk && jj != -1)
{
flag = -1;
}
//为正号(可省略)
/*
else if(jj > kk)
{
flag = 1;
}
*/
//十六进制转十进制
int len2 = strlen(hex);
//字母转数字
for (int l = 0; l < len2; l++)
{
if (hex[l] == 'a' || hex[l] == 'A')
{
hex[l] = 10;
}
if (hex[l] == 'b' || hex[l] == 'B')
{
hex[l] = 11;
}
if (hex[l] == 'c' || hex[l] == 'C')
{
hex[l] = 12;
}
if (hex[l] == 'd' || hex[l] == 'D')
{
hex[l] = 13;
}
if (hex[l] == 'e' || hex[l] == 'E')
{
hex[l] = 14;
}
if (hex[l] == 'f' || hex[l] == 'F')
{
hex[l] = 15;
}
//这里要注意数字字符的转换,不然会转成ascll码表上的数
if (hex[l] == '1')
{
hex[l] = 1;
}
if (hex[l] == '2')
{
hex[l] = 2;
}
if (hex[l] == '3')
{
hex[l] = 3;
}
if (hex[l] == '4')
{
hex[l] = 4;
}
if (hex[l] == '5')
{
hex[l] = 5;
}
if (hex[l] == '6')
{
hex[l] = 6;
}
if (hex[l] == '7')
{
hex[l] = 7;
}
if (hex[l] == '8')
{
hex[l] = 8;
}
if (hex[l] == '9')
{
hex[l] = 9;
}
if (hex[l] == '0')
{
hex[l] = 0;
}
}
//数组转数字
int dec = 0;
for (int p = 0; p < len2; p++)
{
int ret = pow(16, len2 - p - 1);
int hex_dig = hex[p] * ret;
dec += hex_dig;
}
printf("%d", dec * flag);
//========end========
return 0;
}