• POJ 2798:二进制转换十六进制


    很郁闷,这道题一直WA,然而本地我测了好几组数据都是通过的,上网找了网友陈宇龙加油加油加油的AC的代码,http://blog.csdn.net/Since_natural_ran/article/details/51742149,发现没有什么不同。。。很无语。。

    #include<stdio.h>  
    #include<string.h>  
    #include<math.h>  
    int main()  
    {  
        char input[10005];  
        int i,temp,length,Case;  
        scanf("%d",&Case);  
        while(Case--){  
            scanf("%s",input);  
            length = strlen(input);  
            temp = length%4;  
            int sum = 0;  
            if(temp)                            //巧妙地处理了余数位  
            {  
                for(i = 0;i < temp; i++)  
                    sum += (input[i] - '0')*pow(2,temp - 1 - i);    //注意函数  
                printf("%X",sum);  
            }  
            for(i = temp;i < length; i += 4)            //注意 i 必须要赋值  
                printf("%X",(input[i] - '0')*8 + (input[i+1] - '0')*4 + (input[i+2] - '0')*2 + (input[i+3] - '0'));  
            printf("
    ");  
        }  
        return 0;  
    } 

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    char bin[10001]={0};
    int main()
    {
    int n;
    char hex16[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    scanf("%d",&n);
    while(n--){
    scanf("%s",bin);
    int l=strlen(bin);
    for(int i=0;bin[i]!='';i++){
    bin[i]-=0x30;
    }
    char hex[2510]={0};
    int rem=l%4;
    int i,j,tmp=0;
    if(rem!=0){
    for(i=0;i<rem;i++){
    tmp+=bin[i]*pow(2,rem-i-1);
    }
    hex[0]=hex16[tmp];
    }
    else{
    hex[0]=hex16[bin[0]*8+bin[1]*4+bin[2]*2+bin[3]*1];
    i=4;
    }

    if(l>4){
    for(j=1;bin[i+4]!='';i+=4,j++){
    hex[j]=hex16[bin[i]*8+bin[i+1]*4+bin[i+2]*2+bin[i+3]*1];
    }
    hex[j]=hex16[bin[i]*8+bin[i+1]*4+bin[i+2]*2+bin[i+3]*1];hex[j+1]='';
    }
    printf("%s ",hex);
    }
    return 0;
    }

    这是我的代码。思路完全一样,然而就是WA。。。

    不过上面那位仁兄代码写得很不错,学习了。

    *************************************************************************

    睡了一觉,醒来发现自己犯了一个愚蠢的错误:由于自己已经把输入字符串去“ASCII”化了,这样就不能用bin[i+4]!='';来判断字符串结束了!因为0的ASCII码就是‘’!之前测的用例对是因为没有走到过这个条件!!!

    思维不严谨啊~这回知道了,还是用字符串的长度判断比较靠谱.........

     而且,对于字符串不要去“ASCII”化,而是像上面那位仁兄一样,用

    (input[i] - '0')这种形式比较好!
  • 相关阅读:
    docker compose示例
    mysql表分区案例
    mysql表分区实战
    mysql分表
    MongoDB基础教程系列--目录结构
    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
    网站性能压力测试工具--apache ab使用详解
    tomcat8 JVM 优化
    tomcat8 性能优化
    redis.properties
  • 原文地址:https://www.cnblogs.com/cjf1699-dut/p/7306101.html
Copyright © 2020-2023  润新知