Advertisement
nontawat1996

เปรียบเทียบเลขฐาน

Mar 12th, 2012
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. int ans2[37]={0},ans1,min2;
  6. char in1[100]={'\0'},in2[100]={'\0'};
  7. void swap()
  8. {
  9.     char in3[100];
  10.     int i,n;
  11.     strcpy(in3,in1);
  12.     n=strlen(in3);
  13.     for(i=0;i<strlen(in3);i++)
  14.     {
  15.         in1[i]=in3[n-i-1];
  16.     }
  17.     strcpy(in3,in2);
  18.     n=strlen(in3);
  19.     for(i=0;i<strlen(in3);i++)
  20.     {
  21.         in2[i]=in3[n-i-1];
  22.     }
  23. }
  24. void sans2(int min)
  25. {
  26.     min2=min;
  27.     int i,j,n;
  28.     for(i=min;i<=36;i++)
  29.     {
  30.         for(j=0;j<strlen(in2);j++)
  31.         {
  32.             if(in2[j]>='A')
  33.             {
  34.                 n=(in2[j]-'A')+10;
  35.                 ans2[i]+=n*pow(i,j);
  36.             }
  37.             else
  38.             {
  39.                 n=(in2[j]-'0');
  40.                 ans2[i]+=n*pow(i,j);
  41.             }
  42.         }
  43.     }
  44. }
  45. int sans1(int min)
  46. {
  47.     int i,j,n;
  48.     for(i=min;i<=36;i++)
  49.     {
  50.         ans1=0;
  51.         for(j=0;j<strlen(in1);j++)
  52.         {
  53.             if(in1[j]>='A')
  54.             {
  55.                 n=(in1[j]-'A')+10;
  56.                 ans1+=n*pow(i,j);
  57.             }
  58.             else
  59.             {
  60.                 n=(in1[j]-'0');
  61.                 ans1+=n*pow(i,j);
  62.             }
  63.         }
  64.         for(j=min2;j<=36;j++)
  65.         {
  66.             if(ans1==ans2[j])
  67.             {
  68.                 swap();
  69.                 printf("%s (base %d) = %s (base %d)\n",in1,i,in2,j);
  70.                 return 0;
  71.             }
  72.         }
  73.     }
  74.     swap();
  75.     printf("%s is not equal to %s in any base 2..36\n",in1,in2);
  76.     return 0;
  77. }
  78. int main()
  79. {
  80.     int i,j;
  81.     int max;
  82.     while(1)
  83.     {
  84.         scanf("%s %s",in1,in2);
  85.         swap();
  86.         max=-1;
  87.         for(i=0;i<strlen(in2);i++)
  88.         {
  89.             if(in2[i]<='9')
  90.             {
  91.                 if(in2[i]-'0'>max) max=in2[i]-'0';
  92.             }
  93.             if(in2[i]>='A')
  94.             {
  95.                 if((in2[i]-'A')+10>max) max=(in2[i]-'A')+10;
  96.             }
  97.         }
  98.         sans2(max+1);
  99.  
  100.         max=-1;
  101.         for(i=0;i<strlen(in1);i++)
  102.         {
  103.             if(in1[i]<='9')
  104.             {
  105.                 if(in1[i]-'0'>max) max=in1[i]-'0';
  106.             }
  107.             if(in1[i]>='A')
  108.             {
  109.                 if((in1[i]-'A')+10>max) max=(in1[i]-'A')+10;
  110.             }
  111.         }
  112.         sans1(max+1);
  113.         for(i=0;i<=36;i++) ans2[i]=0;
  114.         memset(in1,'\0',strlen(in1));
  115.         memset(in2,'\0',strlen(in2));
  116.     }
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement