C 习题7-8 字符串转换成十进制整数 (15分)

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

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

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

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

输出样例:
-3905

#include 
int main()
{
    int i,k,temp=1;
    char str[80],xin[80];
    long number;
    i=0;
    while((str[i]=getchar())!='#')
        i++;
    str[i]='\0';
    k=0;
    for(i=0;str[i]!='\0';i++)
        if(str[i]>='0'&&str[i]<='9'||str[i]>='a'&&str[i]<='f'||str[i]>='A'&&str[i]<='F'||str[i]=='-'){
            xin[k]=str[i];
            k++;
        }
    xin[k]='\0';
    if(xin[0]=='-')
    temp=-1;
    number=0;
    for(i=0;xin[i]!='\0';i++){
        if(xin[i]>='0'&&xin[i]<='9')
            number=number*16+xin[i]-'0';
        else if(xin[i]>='A'&&xin[i]<='F')
            number=number*16+xin[i]-'A'+10;
        else if(xin[i]>='a'&&xin[i]<='f')
            number=number*16+xin[i]-'a'+10;
    }
    printf("%ld\n",temp*number);
    return 0;
}



你可能感兴趣的:(PAT,c++)