1010

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

#define N 10+10
typedef unsigned long long LL;

LL Change_D(char A[], int r);
int Find(char A[]);

int main()
{
    char N1[N], N2[N];
    int tag, radix, minr;
    LL ND1, ND2, ans;

    cin >> N1 >> N2 >> tag >> radix;

    if (tag == 2)
    {
        char tem[N];
        strcpy(tem, N2);
        strcpy(N2, N1);
        strcpy(N1, tem);
    }
    ND1 = Change_D(N1, radix);
    minr = Find(N2);
    LL l = minr;
    LL r = ND1;
    while (l < r)
    {
        ans = (l + r) >> 1;
        ND2 = Change_D(N2, ans);
        if (ND1 == ND2)
            l = r = ans;
        else if (ND2 > ND1)
            r = ans - 1;
        else if (ND2 < ND1)
            l = ans + 1;

    }
    if ((Change_D(N2, l) == ND1))
        printf("%llu\n", l);
    else
        printf("Impossible\n");

    system("pause");
    return 0;
}
LL Change_D(char A[], int r)
{
    LL  V, L;
    L = strlen(A);
    V = 0;
    for (LL i = 0; i < L ; i++)
    {
        V *= r;
        if (A[i] <= '9')
            V += (A[i] - '0');
        else
            V += (A[i] - 'a' + 10);
    }
    return V;
}
int Find(char A[])
{
    int L = strlen(A);
    int minr=0;
    for (int i = 0; i < L; i++)
    {
        if (A[i] <= '9'&& A[i] >= '0')
            minr = max(minr, A[i] - '0');
        else
            minr = max(minr, A[i] - 'a' + 10);
    }
    return minr+1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值