UVA 343 - What Base Is This?

先求出两个数分别满足的最小进制,之后两个数从最小进制开始判断两数在10进制下是否相等
代码如下:

#include 

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<

你可能感兴趣的:(uva)