POJ 2798:二进制转换十六进制(一直WA)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2798:二进制转换十六进制(一直WA)相关的知识,希望对你有一定的参考价值。

很郁闷,这道题一直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("\n");  
    }  
    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]!=‘\0‘;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]!=‘\0‘;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]=‘\0‘;
}
printf("%s\n",hex);
}
return 0;
}

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

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

 

以上是关于POJ 2798:二进制转换十六进制(一直WA)的主要内容,如果未能解决你的问题,请参考以下文章

POJ-1276 Cash Machine 多重背包 二进制优化

Shorten IPv6 Address

3255:十进制到六进制-poj

POJ44:正整数的任意进制转换

poj1038 Bugs Integrated, Inc.

$Poj1220/AcWing124 Number Base Convertion$ 进制转换+高精除