输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),

源码工坊 其他问答 1

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

回复

共2条回复 我来回复
  • 源码港湾
    这个人很懒,什么都没有留下~
    评论
    /*习题7-8 字符串转换成十进制整数(15 分)
    输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,
    然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
    输入在一行中给出一个以#结束的非空字符串。
    在一行中输出转换后的十进制数。题目保证输出在长整型范围内。*/
    #include<stdio.h>
    #include<string.h>
    #include<math.h> 
    int main(void){
        int a[100]={0};
        char str[100];                      
        gets(str);
        int m,i,j,flag,sum,k;
        m=strlen(str);
        j=0,flag=1;
        for(i=0;i<m;i++)
        {
            if(str[i]>='0'&&str[i]<='9')
            {
                a[j]=str[i]-48;
                //printf("a[%d]=%d\n",j,a[j]); 
                j++;
            }
            else if(str[i]>='A'&&str[i]<='F')
            {
                a[j]=str[i]-55;
                //printf("大:a[%d]=%d\n",j,a[j]);
                j++;
            }
            else if(str[i]>='a'&&str[i]<='f')
            {
                a[j]=str[i]-87;
                //printf("小:a[%d]=%d\n",j,a[j]);
                j++;
            }
            if(str[i]=='-'&&j==0)                //判断第一个十六进制字符之前是否存在字符“-”
                flag=-1;  
        }
        sum=0,k=0;
        for(i=j-1;i>=0;i--)                            //16进制的数字转化成10进制的数字 
        {
            sum+=a[i]*pow(16,k);
            k++;
        }  
        if(sum==0)                                    //0不能输出-0 
            printf("0\n");
        else{                                       
            sum=flag*sum;
            printf("%d",sum);
        }
        return 0;
    }
    
    0条评论
  • 毕设驿站
    这个人很懒,什么都没有留下~
    评论
    #include <stdio.h>
    int main()
    {
        int ch;
        int sign = 1;
        int n = 0;
        while ((ch = getchar()) != '#')
        {
            if (ch == '-')
                sign = -1;
            else if (ch >= '0' && ch <= '9')
                n = n * 16 + ch - '0';
            else if (ch >= 'a' && ch <= 'f')
                n = n * 16 + 10 + ch - 'a';
            else if (ch >= 'A' && ch <= 'F')
                n = n * 16 + 10 + ch - 'A';
        }
        printf("%d\n", sign * n);
    }
    
    0条评论

发表回复

登录后才能评论