该程序用于寻找使a×b=c成立的最小进制数(2-16进制)。主函数读取3个整数a,b,c,调用getNumSys函数进行计算。该函数从2进制开始尝试,使用ito10函数将a,b,c转换为10进制数,检查a×b是否等于c。ito10函数实现进制转换并验证数字是否合法。若找到满足条件的进制则返回,否则返回0。程序输出所求进制数或0表示无解。
cpp
#include<stdio.h>
int getNumSys(int a,int b,int c);
int ito10(int num,int n);
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",getNumSys(a,b,c));
return 0;
}
int getNumSys(int a,int b,int c){
// abc设为i进制,需要把abc全转为10进制,然后进行分析
//哪就写个i进制转10的函数 int ito10(int num,int n)
int i=2;
for(;i<=16;i++){
if(ito10(a,i)*ito10(b,i)==ito10(c,i))
return i;
}
return 0;
}
int ito10(int num,int n){
// i进制num转为10进制的方法
//对应的权X对应的值 加起来
int base = 1;
int sum =0;
while(num) {
if(num%10>=n) return -1; //说明num这数不符合n进制
sum += base*(num%10);
base*=n; //处理权
num/=10;
}
return sum;
}