2009-01-24 22:05:32來源不明

ACM 389 Basically Speaking

先換成10進位的數字,再利用陣列去跑進位的部分。

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

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