输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

±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;
}

这题还是要审题啦,我发现我真的很不喜欢看题目。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。 存在负号无效的情况哦,其他没啥了还挺简单的

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐