首先是我写的这版,只能得17分,搜了一下,还有几个case不过的原因大概有2:一是本题默认基数无限大,这样的话long long可能也存不下。二是超时问题,查找基数时应当采用二分法。因时间紧张没有仔细验证,留待后续优化。
一个可通过的代码链接如下:https://blog.csdn.net/linghugoolge/article/details/82620905
感谢。
#include<iostream>
#include<cstring>
using namespace std;
long Ra(char N[11],long ra)
{
int len=strlen(N),i;
long num=0,times=1;
for(i=len-1;i>=0;i--)
{
if(N[i]>='0'&&N[i]<='9')
{
num=num+(N[i]-'0')*times;
times=times*ra;
}
else if(N[i]>='a'&&N[i]<='z')
{
num=num+(N[i]-'a'+10)*times;
times=times*ra;
}
}
return num;
}
int main()
{
char N1[11],N2[11];
int tag,i;
long radix,num1,num2;
cin>>N1>>N2>>tag>>radix;
if(tag==1)
{
num1=Ra(N1,radix);
for(i=2;i<=10000;i++)
{
if(num1==Ra(N2,i))
{cout<<i;return 0;}
}
cout<<"Impossible";return 0;
}
else
{
num2=Ra(N2,radix);
for(i=2;i<=10;i++)
{
if(num2==Ra(N1,i))
{
cout<<i;
return 0;
}
}
cout<<"Impossible";
return 0;
}
}