时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
表达式6×9=42对于十进制来说是错误的,但是对于十三进制来说是正确的。即6(13)×9(13)=42(13),而42(13)=4×131+2×130=54(10)。你的任务是写一段程序读入3个整数p、q和r,然后确定一个进制B(2≤B≤16)使得p×q=r。如果B有很多选择,输出最小的一个。例如:p=11,q=11,r=121。则有11(3) ×11(3)=121(3),11(10) ×11(10)=121(10)。这种情况下,输出3。如果没有合适的进制,则输出0。
输入
一行,3个B进制的正整数p、q、r(数位≤7)。
输出
使得p×q=r成立的最小进制B,如果没有合适的进制,则输出0。
样例输入
6 9 42
样例输出
13
题记:
题意:把输入的数按照n进制来看待,根据把它转化为n进制后等式成立,来确定n。
写出n进制转化为10进制的函数问题就解决了。
C++程序如下:
#include <iostream>
#include <cstdio>
using namespace std;
//进制转换函数
long convert(long v, int base)
{
long ans, weight;
int digit;
ans = 0;
weight = 1;
while(v) {
digit = v % 10;
v /= 10;
if(digit >= base) {
ans = -1;
break;
}
ans += weight * digit;
weight *= base;
}
return ans;
}
int main()
{
long p1, q1, r1, p2, q2, r2;
cin >> p1 >> q1 >> r1;
int base;
for(int i=2; i<16; i++)
{
base = 0;
p2 = convert(p1, i);
q2 = convert(q1, i);
r2 = convert(r1, i);
if(p2<0 || q2<0 || r2<0)
continue;
else if(p2 * q2 == r2){
base = i;
break;
}
}
cout << base;
return 0;
}