9Google AdSense

ACM Problem Solution : 10473 Simple Base Conversion

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

int main()
{
    long int num[10000],dec[10000],len,i,k,total;
    char str[10000],c;
    long int into,power,l,j,l1,integer,i1,d,m,m1;
    double a,b;
    while(scanf("%s",&str)==1)
    {

         len=strlen(str);
         if((str[0]=='0')&&(str[1]=='x'))
         {
        l=1;
        for(j=2;j<len;j++)
        {
           if((str[j]>='0')&&(str[j]<='9'))
           {    num[l]=str[j]-48;
            l++;
           }
           else
           {
            num[l]=str[j]-55;
            l++;
           }
        }
        total=0;
        k=0;
        for(i=l-1;i>0;i--)
        {
            power=pow(16,k++);
            into=num[i]*power;
            total=total+into;
        }
        printf("%ld\n",total);
         }
         else if((str[0]>='0')&&(str[0]<='9'))
         {
        l1=0;
        integer=0;
        for(i1=len-1;i1>=0;i1--)
        {       d=str[i1]-48;
            integer=integer+(d*(pow(10,l1++)));
        }
        m=1;
        while(integer!=0)
        {
               a=integer/16;
               b=integer%16;
               integer=a;
               if(b<0)
               {  b=b*16;
              dec[m++]=b;
               }
               dec[m++]=b;

        }
        printf("0x");
        for(m1=m-1;m1>0;m1--)
        {
            if(dec[m1]>9)
            {
             if(dec[m1]==10)
                printf("A");
             else if(dec[m1]==11)
                printf("B");
             else if(dec[m1]==12)
                printf("C");
             else if(dec[m1]==13)
                printf("D");
             else if(dec[m1]==14)
                printf("E");
             else if(dec[m1]==15)
                printf("F");
             }
            else
                printf("%d",dec[m1]);
        }
        printf("\n");

         }
         else
        break;

    }
    return 0;


}

No comments: