2009-01-23 19:48:11來源不明

ACM 10473 Simple Base Conversion

藉由大數進位的方法推到16進位。

/*************************************************************/

  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4. main()   
  5. {   
  6.  char x[100];   
  7.  int a,b,c;   
  8.  while(gets(x))   
  9.   {   
  10.    if(x[0]=='-'break;   
  11.    if(x[0]=='0'&&x[1]=='x')   
  12.     {   
  13.      int sum=0,temp=1;   
  14.      for(a=strlen(x)-1;a>=2;a--)   
  15.       {   
  16.        if(x[a]>='A')   
  17.        sum=sum+temp*(x[a]-55);   
  18.        else  
  19.        sum=sum+temp*(x[a]-48);   
  20.        temp=temp*16;   
  21.       }   
  22.       printf("%d\n",sum);   
  23.     }   
  24.    else  
  25.     {   
  26.      int temp=0,y[50]={0};   
  27.      for(a=0;a<strlen(x);a++)   
  28.        temp=temp*10+x[a]-48;   
  29.        y[0]=temp;   
  30.      for(a=0;a<50;a++)   
  31.       {   
  32.        if(y[a]>=16)   
  33.         {   
  34.          y[a+1]=y[a+1]+y[a]/16;   
  35.          y[a]=y[a]%16;   
  36.         }   
  37.       }   
  38.      printf("0x");   
  39.      for(a=49;a>=0;a--)   
  40.       {   
  41.        if(y[a]!=0)   
  42.         {   
  43.         for(b=a;b>=0;b--)   
  44.          {   
  45.             switch(y[b])   
  46.              {   
  47.              case 10:printf("A");break;   
  48.              case 11:printf("B");break;   
  49.              case 12:printf("C");break;   
  50.              case 13:printf("D");break;   
  51.              case 14:printf("E");break;   
  52.              case 15:printf("F");break;   
  53.              default:printf("%d",y[b]);   
  54.              }   
  55.          }   
  56.          break;   
  57.         }   
  58.       }    
  59.       printf("\n");   
  60.     }   
  61.   }   
  62.  return 0;   
  63. }  

上一篇:ACM 412 Pi

下一篇:ACM 389 Basically Speaking