【每天一道PAT】1010 Radix

思路

直接暴力枚举,有一个测试点会超时。有两个错误一直没找到,应该是有模糊的边界条件没考虑到。
超时解决办法:二分查找

#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");
}



原文地址:https://www.cnblogs.com/xinyuLee404/p/12664705.html