十六进制字符串转换成十进制非负整数

十六进制字符串转换成十进制非负整数

题目详情

输入一个以#结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出。

输入格式

输入在一行中给出一个不超过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;
}

以上。

猜你喜欢

转载自blog.csdn.net/CH_whale/article/details/113202123