Saturday, February 26, 2011

446 - Kibbles "n" Bits "n" Bits


#include<stdio.h>
#include<string.h>
int HexToDec(char[],char[]);
void strRev(char str[]);

int main()
{
    int t,a,b,c;
    char str[15],num1[5],num2[5],bin1[15],bin2[15],opt;
    //freopen("in.txt","r",stdin);
    scanf("%d\n",&t);

    while(t--)
    {
        gets(str);
        sscanf(str,"%s %c %s",num1,&opt,num2);

        a=HexToDec(num1,bin1);
        b=HexToDec(num2,bin2);

        if(opt=='+')
            c=a+b;
        else
            c=a-b;

        printf("%s %c %s = %d\n",bin1,opt,bin2,c);
    }
    return 0;
}

int HexToDec(char num[],char bin[])
{
    int dec=0,i,j,k=12,n;
    for(i=0;i<=12;i++)
        bin[i]=48;
    bin[13]='\0';

    //Hex to Decimal
    for(i=0;num[i];i++)
    {
        if(num[i]<65)
            n=num[i]-48;
        else
            n=num[i]-55;

        dec=dec<<4;
        dec=dec|n;
    }

    //Hex to binary
    strRev(num);
    for(i=0;num[i];i++)
    {
        if(num[i]<65)
            n=num[i]-48;
        else
            n=num[i]-55;

        for(j=1;j<=4;j++)
        {
            bin[k--]=(n&1)+48;
            n=n>>1;
        }
    }
    return dec;
}

void strRev(char str[])
{
    int i,len=strlen(str),n=len/2;
    for(i=0;i<n;i++)
    {
        str[i]=str[i]^str[len-i-1];   
        str[len-i-1]=str[i]^str[len-i-1];
        str[i]=str[i]^str[len-i-1];
    }
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.