这个题。。。
有毒
疯狂wa
首先最大进制并不是36,可能会很大很大, 你得二分。。
其次会爆longlong,要用usigned long long。。。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef unsigned long long LL;
char a[20], b[20], t[20];
LL trans(char s[], int e) {
int len = strlen(s);
LL ans = 0;
for (int i = 0; i < len; i++) {
ans *= e;
if (s[i] >= '0' && s[i] <= '9')
ans += s[i] - '0';
else
ans += s[i] - 'a' + 10;
}
return ans;
}
int main() {
int tag, rad;
scanf("%s%s%d%d", a, b, &tag, &rad);
if (tag == 2) {
strcpy(t, a);
strcpy(a, b);
strcpy(b, t);
}
LL an = trans(a, rad);
int bmax = 0;
int blen = strlen(b);
for (int i = 0; i < blen; i++) {
if (b[i] >= '0' && b[i] <= '9')
bmax = max(bmax, b[i] - '0');
else
bmax = max(bmax, b[i] - 'a' + 10);
}
LL l = bmax+1, r = an;
while (l < r) {
LL mid = l + r >> 1;
LL amid = trans(b, mid);
if (amid == an)
l = r = mid;
else if (amid < an)
l = mid+1;
else
r = mid-1;
}
if (trans(b, l) == an)
printf("%llu", l);
else
printf("Impossible\n");
return 0;
}