代码如下:
#include <bits/stdc++.h>
using namespace std;
#define arrLength 7
// 初始化数组
void initArray(int* arr) {
for (int i=0; i<arrLength; i++) {
arr[i] = -1;
}
}
// 把数的各个位打散倒序放入数组中
// 例如 114514 -> [4, 1, 5, 4, 1, 1, -1]
void splitToArray(int n, int* arr) {
for (int i=0; ; i++) {
if (n <= 0) {
break;
}
arr[i] = n%10;
n /= 10;
}
}
// 获取一个数的最小进制
int getBase(int* arr) {
int maxb=0;
for (int i=0; i<arrLength; i++) {
if (arr[i]==-1) {
break;
} else if (arr[i] > maxb) {
maxb = arr[i];
}
}
return maxb+1;
}
// 获取三个数中的最小进制
int getMinBase(int* ar, int* br, int* cr) {
int x, y, z;
x = getBase(ar);
y = getBase(br);
z = getBase(cr);
if (x > y) {
if (x > z) {
return x;
} else {
return z;
}
} else {
if (y > z) {
return y;
} else {
return z;
}
}
}
// 转换成十进制数
long long toDecimal(int* arr, int base) {
long long decimal = 0;
for (int i=0; i<arrLength; i++) {
if (arr[i] != -1) {
decimal += arr[i] * ((long long)(pow(base, i)));
} else {
break;
}
}
return decimal;
}
int main() {
int a, b, c, minbase, base=0, ar[arrLength], br[arrLength], cr[arrLength];
cin >> a >> b >> c;
initArray(ar);
initArray(br);
initArray(cr);
splitToArray(a, ar);
splitToArray(b, br);
splitToArray(c, cr);
minbase = getMinBase(ar, br, cr);
for (int i=minbase; i<17; i++) {
if (toDecimal(ar, i) * toDecimal(br, i) == toDecimal(cr, i)) {
base = i;
break;
}
}
cout << base << endl;
return 0;
}