题解:P12287 [蓝桥杯 2024 国 Java A] 进制判断
思路
枚举进制
最后统计答案,如果存在唯一结果就输出这个数在
Code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, b;
string a;
ll zhuan(char s) {
if (s>='0' && s<='9') return s-'0';//是2,4,8进制
else if (s>='A' && s<='F') return s-'A'+10;//16进制
else return -1;//不是所求进制
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n;
while (n--) {
cin>>a>>b;
vector <ll>cnt;
for (int x=2; x<=16; x*=2) {
bool flag=1;
ll ans=0;
for (int j=0; j<a.size(); j++) {
ll zz=zhuan(a[j]);
if (zz==-1 || zz>=x) {
flag=0;
break;
}//不符合当前进制x跳过
if (ans*x+zz > b) {
flag=0;
break;
}//超过了要求的b,先计算防溢出
ans=ans*x+zz;//小于等于b,在范围内
}
if (flag==0) continue;
cnt.push_back(ans);//记录符合要求的十进制a[i]
}
if (cnt.size()==1) cout<<cnt[0]<<"\n";
else cout<<"-1\n";
}
return 0;
}