POJ1331确定进制
来源:互联网 发布:淘宝客服在哪里应聘 编辑:程序博客网 时间:2024/04/28 13:18
#include <iostream>#include <cstdio>#include <cstring>using namespace std;//将输入的b进制数转换为十进制数表示int b2ten(int p, int b){ //利用字符串来存储各个位 char temp[100]; int ret = 0; sprintf(temp, "%d", p); //temp[i]从temp[0]开始依次表示最高位,次高w位... int len = strlen(temp); for(int i = 0; i < len; ++i) { if((temp[i] - '0') >= b) return -1; //将b进制转换为10进制 //当下一个i存在时前一个ret就要乘以b,比如当时三位数时, //当取最高位时只有下一位存在时才将原来的ret乘以b ret *= b;//i每加1则上一个ret就要多成个b即((temp[0] * b) + temp[1]) * b + ... //也就是说没出现新的i前面的ret就要乘以b ret += temp[i] - '0'; } return ret;}//int main(){ int T; int p; int q; int r; int b; cin >> T; while(T--) { cin >> p >> q >> r; for(b = 2; b <= 16; ++b) { long p2 = b2ten(p, b); long q2 = b2ten(q, b); long r2 = b2ten(r, b); if(p2 == -1 || q2 == -1 || r2 == -1) continue; if(p2 * q2 == r2) { cout << b << endl; break; } } if(b == 17) cout << 0 << endl; } return 0;}