十六进制字符串转换成十进制非负整数
题目详情
输入一个以#结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出。
输入格式
输入在一行中给出一个不超过80个字符长度的、以#结束的非空字符串。
输出格式
第1行中输出已滤去所有非十六进制字符的字符串。 在第2行中输出转换后的十进制数。题目保证输出结果在长整型范围内。
输入样例
-zy1+Ak0-bq?#
输出样例
1A0b
6667
代码
#include <stdio.h>
int main()
{
char c;
char a[87];
int i=0;
while((c=getchar())!='#')
{
if((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F'))
{
a[i++]=c;
}
}
a[i]='\0';
int j;
int b[87];
for(j=0;j<i;j++)
{
printf("%c",a[j]);
b[i-1-j]=a[j];
}
printf("\n");
int num,sum=0;
for(j=0;j<i;j++)
{
switch(b[j])
{
case '0':num=0;break;
case '1':num=1;break;
case '2':num=2;break;
case '3':num=3;break;
case '4':num=4;break;
case '5':num=5;break;
case '6':num=6;break;
case '7':num=7;break;
case '8':num=8;break;
case '9':num=9;break;
case 'a':
case 'A':num=10;break;
case 'b':
case 'B':num=11;break;
case 'c':
case 'C':num=12;break;
case 'd':
case 'D':num=13;break;
case 'e':
case 'E':num=14;break;
case 'f':
case 'F':num=15;break;
}
sum=sum+num*(pow(16,j));
}
printf("%d",sum);
return 0;
}
以上。