思路:选择一个进制B,按照该进制将被乘数,乘数,乘积分别转换成10进制,然后判断等式是否相等。输出使得等式相等的最小的B即为所求。
代码:
#include<stdio.h> #include<string.h> long b2ten(char *x, int b) { int ret = 0; int len = strlen(x); for(int i = 0; i < len; i++) { if(x[i] - '0' >= b) return -1; ret *= b; ret += x[i] - '0'; } return (long)ret; } int main() { int n, b; char p[8], q[8], r[8]; long pval, qval, rval; scanf("%d", &n); while(n--) { scanf("%s%s%s", p, q ,r); for(b = 2; b <=16; b++) { pval = b2ten(p, b); qval = b2ten(q, b); rval = b2ten(r, b); if(pval == -1 || qval == -1 || rval == -1) continue; if(pval * qval == rval) { printf("%d ", b); break; } } if(b == 17) printf("0 "); } return 0; }