浙大PTA 实验7-3-6 字符串转换成十进制整数

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

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

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

输入样例:
±P-xf4±1!#
输出样例:
-3905

#include
#include
int main() 
{
	char c,a[80];
	int i=0,flag=0,j,sum=0;
	scanf("%c",&c);
	while(c!='#')
	{
		if(c<='f'&&c>='a'||c<='F'&&c>='A'||c<='9'&&c>='0')
		{
			a[i++]=c;
			if(flag==0)
				flag=1;
		}
		if(c=='-'&&flag==0)
			flag=-1;
		scanf("%c",&c);
	}
	for(j=0;j<i;j++)
	{
		if(a[j]<='f'&&a[j]>='a')
			sum+=(a[j]-87)*pow(16,i-j-1);
		else if(a[j]<='F'&&a[j]>='A')
			sum+=(a[j]-55)*pow(16,i-j-1);
		else
			sum+=(a[j]-48)*pow(16,i-j-1);
	}
	printf("%d",sum*flag);
}

你可能感兴趣的:(C)