http://ybt.ssoier.cn:8088/problem_show.php?pid=1413
注意一些细节问题就可以了。
1、余数必定小于进制数
2、注意判断数字范围
1<=p,q,r<=1000000
开始以为p*q会很大,但是实际
p*q<=1000000;
因为p*q=r<10000000;
所以,本身没有必要使用高精度,
但是如果本题目使用高精度来计算。
则需要运用大整数的相关技巧来解决这个问题了。
#include<iostream> #include<cstring> #include<string> #include<cmath> using namespace std; int ntoT(int k,int num)//num从k进制转10进制 { int w = 1;//weishu int ans = 0; while (num) { int y = num % 10; if (y > k)//余数必须小于等于进制数 return -1; ans += y*w; w *= k; num /= 10; } return ans; } int main() { int p, q, r; cin >> p >> q >> r; int i; for (i = 2; i < 41; i++) { int p1 = ntoT(i, p); if (p1 < 0) continue; int q1 = ntoT(i, q); if (q1 < 0) continue; int r1 = ntoT(i, r); if (r1 < 0) continue; if (p1*q1 == r1) { cout << i << endl; break; } } if(i==41) cout << 0 << endl; return 0; }