百练 2972 确定进制 解题报告
思路:选择一个进制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\n", b); break; } } if(b == 17) printf("0\n"); } return 0; }
posted on 2014-03-16 13:55 stackhacks 阅读(241) 评论(0) 编辑 收藏 举报