先求出两个数分别满足的最小进制,之后两个数从最小进制开始判断两数在10进制下是否相等
代码如下:
#include <bits/stdc++.h> using namespace std; int BaseChange(int base, char m[])//从给定进制转化到十进制 { int a=0,b; for(int i=0; m[i]; ++i) { a*=base; if(m[i]>='0'&&m[i]<='9') b=m[i]-'0'; else b=m[i]+10-'A'; a+=b; } return a; } char x[100],y[100]; int main() { int max1,max2,i,j,flag,a; while(cin>>x>>y) { max1=max2=1; //求两个数分别满足的最小进制 for(i=0; x[i]; ++i) { if(x[i]>='0'&&x[i]<='9') a=x[i]-'0'; else a=x[i]+10-'A'; max1=max(max1,a); } for(i=0; y[i]; ++i) { if(y[i]>='0'&&y[i]<='9') a=y[i]-'0'; else a=y[i]+10-'A'; max2=max(max2,a); } flag=1; for(i=max1+1; i<37; ++i) for(j=max2+1; j<37; ++j) if(flag&&!(BaseChange(i,x)-BaseChange(j,y))) { flag=0; cout<<x<<" (base "<<i<<") = "<<y<<" (base "<<j<<")"<<endl; } if(flag) cout<<x<<" is not equal to "<<y<<" in any base 2..36"<<endl; } return 0; }