// 356K 0MS G++
#include <cstdio>
#include <cstring>
using namespace std;
char p[20];
char q[20];
char r[20];
int caseNum;
inline int MAX(int a, int b) {
return a > b ? a: b;
}
int cal(const char* num, int base) {
int length = strlen(num);
int digitBase = 1;
int res = 0;
for (int i = length -1; i >=0 ; i--) {
res += digitBase*(num[i] - '0');
digitBase *= base;
}
return res;
}
int getMaxDigit(const char * num) {
int length = strlen(num);
int maxDigit = '0';
for (int i = 0; i < length; i++) {
maxDigit = MAX(maxDigit, num[i]);
}
return maxDigit - '0' + 1;
}
int main() {
scanf("%d", &caseNum);
for (int i = 1; i <= caseNum; i++) {
scanf("%s %s %s", p, q, r);
int startBase = 2;
startBase = MAX(startBase, getMaxDigit(p));
startBase = MAX(startBase, getMaxDigit(q));
startBase = MAX(startBase, getMaxDigit(r));
int k = startBase;
for (; k<= 16; k++) {
int p1 = cal(p, k);
int q1 = cal(q, k);
int r1 = cal(r, k);
if (p1*q1 == r1) {
printf("%d\n", k);
break;
}
}
if (k > 16) {
printf("0\n");
}
}
}
本来以为有啥捷径,不过貌似没有,还是老老实实的遍历进制了,
有个提速就是先把p q r的数字全部过一遍,找到最大的数字K, 那么这三个数的进制必然 > K,这样节省些时间.