思路
直接暴力枚举,有一个测试点会超时。有两个错误一直没找到,应该是有模糊的边界条件没考虑到。
超时解决办法:二分查找
#include <cstdio>
#include <string.h>
#include <math.h>
#include <vector>
using namespace std;
vector<int> num1, num2;
int main()
{
char num_1[11] = {0};//数字一
char num_2[11] = {0};//数字二
int r = 1;
long long num=0,judge=0;
int tag, radis;//标签,基数
scanf("%s %s %d %d", num_1, num_2,&tag,&radis);
//字符串转换数字一
for (int i = 0; i < strlen(num_1); ++i)
{
if(num_1[i]>=97) num1.push_back(num_1[i]-87);
else num1.push_back(num_1[i]- '0');
}
//字符串转换数字二
for (int i = 0; i < strlen(num_2); ++i)
{
if(num_2[i]>=97) num2.push_back(num_2[i]-87);
else num2.push_back(num_2[i]- '0');
}
if(tag ==2)
{
vector<int> temp;
temp = num1;
num1 = num2;
num2 = temp;
}
int len = num1.size();
for (int j = 0; j < len; ++j)
{
num+=num1[j]*pow(radis,len-j-1);
}
len = num2.size();
while(judge<num&&judge>=0)
{
judge =0;
for (int j = 0; j < len; ++j)
{
judge+=num2[j]*pow(r,len-j-1);
}
r++;
}
if(judge ==num)
{
if(num1.size()==1&&num2.size()==1)
printf("%d",num1[0]+1);
else
printf("%d", r-1);
}
else printf("Impossible");
}