【问题描述】输入一个以回车结束的字符串(少于80个字符),滤去所有的非十六进制字符后,组成一个新的字符串(十六进制形式),然后将其转换为十进制数后输出。
【输入形式】
【输出形式】
【样例输入】+A
【样例输出】Hex=10
【样例说明】
【评分标准】
#include<stdio.h>
#include<string.h>
int main () {
int i=0;
int sum=0;
int intp;
int length;
char *p;
char a[80]={};
char arr1[80]={};
gets(a);
p=a;
while(*p!='\0') {
if((*p>=65&&*p<=90)||*p=='+'||*p=='-'||(*p>='0'&&*p<='9')) {
arr1[i]=*p;
i++;
}
p++;
}
i=1;
length=strlen(arr1);
//printf("%s",arr1);
if(arr1[0]=='-'||arr1[0]=='+') {
//if(arr1[0]=='-') {
// printf("-");
//}
p=arr1+length-1;
while(*p!='+'&&*p!='-') {
if(*p<='Z'&&*p>='A'){
intp=*p-55;
} else if (*p<='9'&&*p>='0') {
intp=*p-'0';
}
sum=i*intp+sum;
i=16*i;
p--;
}
} else {
p=arr1+length-1;
while(p!=arr1) {
if(*p<='Z'&&*p>='A'){
intp=*p-55;
} else if (*p<='9'&&*p>='0') {
intp=*p-'0';
}
sum=i*intp+sum;
i=16*i;
p--;
}
if(*p<='Z'&&*p>='A'){
intp=*p-55;
} else if (*p<='9'&&*p>='0') {
intp=*p-'0';
}
sum=sum+i*intp;
}
printf("Hex=%d",sum);
//system("pause");
}
方法过于笨拙。。。。。