7-48 字符串转换成十进制整数 (15分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。输入格式:输入在一行中给出一个以#结束的非空字符串。输出格式:在一行中输出转换后的十进制数。题目保证输出在长整型范围内。输入样例:±P-xf4±1!#输出样例:3905我...
·
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
±P-xf4±1!#
输出样例:
3905
我的代码:
/**帽***/
#include <stdio.h>
int main(){
char s[100],c;
int n=0,i=0,flag=1;
do{
scanf("%c",&c);
if((c>='a' && c<='f') || (c>='A' && c<='F') || (c>='0' && c<='9')){
s[i++]=c;
n++;
}else if(c=='-' && n==0){
flag=0;
}
}while(c!='#');
int j=1,sum=0;;
for(i=n-1;i>=0;i--){
if(s[i]>='a' && s[i]<='f') sum+=j*(s[i]-'a'+10);
else if(s[i]>='A' && s[i]<='F') sum+=j*(s[i]-'A'+10);
else if(s[i]>='0' && s[i]<='9') sum+=j*(s[i]-'0');
j*=16;
}
if(sum==0) printf("0\n");
else if(flag==0) printf("-%d",sum);
else printf("%d",sum);
return 0;
}
这题还是要审题啦,我发现我真的很不喜欢看题目。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。 存在负号无效的情况哦,其他没啥了还挺简单的
更多推荐
已为社区贡献1条内容
所有评论(0)