UVA 343 - What Base Is This?

先求出两个数分别满足的最小进制,之后两个数从最小进制开始判断两数在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;
}

猜你喜欢

转载自blog.csdn.net/liuxinyu666/article/details/80004685
今日推荐