题目描述
表达式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
代码如下
#include<bits/stdc++.h>
using namespace std;
long long convert(long long a,int n){
long ans=0,weight=1; //weight为权重
int digit; //digit为个位数
while(a!=0){
digit=a%10;
a=a/10;
if(digit>=n){
ans=-1;
break;
}
ans+=weight*digit;
weight*=n;
}
return ans;
}
int main(){
long long p,q,r;
long long p1,q1,r1;
cin>>p>>q>>r;
int ans;
for(int i=2;i<=16;i++){
p1=convert(p,i);
if(p1<0){
ans=0;
continue;
}
q1=convert(q,i);
if(q1<0){
ans=0;
continue;
}
r1=convert(r,i);
if(r1<0){
ans=0;
continue;
}
if(p1*q1==r1){
ans=i;
break;
}
}
cout<<ans;
return 0;
}