确定进制
题目描述
6 × 9 = 42 6\ \times 9=42 6 ×9=42 对于十进制来说是错误的,但是对于 13 13 13 进制来说是正确的。即 6 ( 13 ) × 9 ( 13 ) = 4 2 ( 13 ) 6_{(13)}\ \times 9_{(13)}=42_{(13)} 6(13) ×9(13)=42(13),而 4 2 ( 13 ) = 4 × 1 3 1 + 2 × 1 3 0 = 5 4 ( 10 ) 42_{(13)}=4\ \times 13^1+2\ \times 13^0=54_{(10)} 42(13)=4 ×131+2 ×130=54(10)。
你的任务是写一段程序读入三个整数 p , q p,q p,q 和 r r r,然后确定一个进制 B ( 2 ≤ B ≤ 16 ) B(2 \le B \le 16) B(2≤B≤16) 使得 p × q = r p\ \times q=r p ×q=r。如果 B B B 有很多选择,则输出最小的一个。
例如: p = 11 , q = 11 , r = 121 p=11,q=11,r=121 p=11,q=11,r=121,则有 1 1 ( 3 ) × 1 1 ( 3 ) = 12 1 ( 3 ) 11_{(3)}\ \times 11_{(3)}=121_{(3)} 11(3) ×11(3)=121(3),因为 1 1 ( 3 ) = 1 × 3 1 + 1 × 3 0 = 4 ( 10 ) 11_{(3)}=1\ \times 3^1+1\ \times 3^0=4_{(10)} 11(3)=1 ×31+1 ×30=4(10) 和 12 1 ( 3 ) = 1 × 3 2 + 2 × 3 1 + 1 × 3 0 = 1 6 ( 10 ) 121_{(3)}=1\ \times 3^2+2\ \times 3^1+1\ \times 3^0=16_{(10)} 121(3)=1 ×32+2 ×31+1 ×30=16(10)。对于进制 10 , 10, 10, 有 1 1 ( 10 ) × 1 1 ( 10 ) = 12 1 ( 10 ) 11_{(10)}\ \times 11_{(10)}=121_{(10)} 11(10) ×11(10)=121(10)。这种情况下,应该输出 3 3 3。如果没有合适的进制,则输出 0 0 0。
输入格式
一行,包含三个整数 p , q , r p,q,r p,q,r,相邻两个整数之间用单个空格隔开。
输出格式
一个整数:即使得 p × q = r p \times q=r p×q=r 成立的最小的 B B B。如果没有合适的 B B B,则输出 0 0 0。
样例 #1
样例输入 #1
6 9 42
样例输出 #1
13
提示
p , q , r p,q,r p,q,r 的所有位都是数字,并且 1 ≤ p , q , r ≤ 1 0 6 1 \le p,q,r \le 10^6 1≤p,q,r≤106。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
long long rev(long long m,long long i){
long long j=0,sum=0;
while(m!=0){
sum+=(long long)((m%10)*pow(i,j));
j++;
m/=10;
}
return sum;
}//得出pqr所代表的十进制数字
long long ma(long long n){
long long max=-1;
while(n!=0){
if(n%10>max){
max=n%10;
}
n/=10;
}
return max;
}//求数字位数的最大值
long long max(long long m,long long n){
if(m>n){
return m;
}
else{
return n;
}
}//求出pqr之中每一位数字的最大值,作为求进制的起始点
int main(){
long long p,q,r,p1,q1,r1,flag=0,maxa;//flag作为标志位,没有找到则为0,否则为1
long long i,j,k;
scanf("%lld%lld%lld",&p,&q,&r);
maxa=max(max(ma(p),ma(q)),ma(r));
for(i=maxa+1;i<=16;i++){
p1=rev(p,i);
q1=rev(q,i);
r1=rev(r,i);
if(p1*q1==r1){
flag=1;
break;
}
}
if(flag==1){
printf("%lld\n",i);
}
else{
printf("%lld\n",0);
}
return 0;//CSDN:旺旺的碎冰冰~
}