习题7-8 字符串转换成十进制整数 (15 分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输出样例:
-3905
参考代码:
#include <stdio.h>
#include <ctype.h>//不太熟悉这个库函数的朋友可以去了解一下,处理字符串类的题还是挺方便的~
#include <math.h>
int main()
{
char ch, str[10];
int n = 0, i = 1, j;
while((ch = getchar())!='#')
{
if(ch == '-'&&n==0)//防止出现负号无效的情况;
i = -1;
else if(isupper(ch))
ch = ch + 32;//大小写转化;
if(isxdigit(ch))
{
str[n++] = ch;
}
}
long long ret = 0;
for(j = 0;j < n;j++)
{
if(str[j] >= 97)
str[j] = str[j]-87;//如果是字母,转化为十六进制下其对应的数字;
else
str[j] = str[j] - '0';
ret += str[j]*pow(16,n-j-1);
}
printf("%ld",i*ret);
return 0;
}
很高兴我的代码能为大帅比(大漂亮)提供一点点思路,欢迎在评论区指正( •̀ ω •́ )✧