看到一道很有意思的算法题

这道题目说人话就是,这个数字给你转换进制,范围为11~36,哪一种转换方式不含字母,它给了个例子,2558转16进制是a1c,含有字母a和c,那16进制就不符合题目要求,要排除16,既然给的范围那么大,那干脆就写个程序让机器算,暴力解法一个一个算过去,看看哪个只包含数字
#include <bits/stdc++.h>
using namespace std;
long long a, b, n[10001];
int main() {
long long num = 8100178706957568;
const char zifu[] = "0123456789abcdefghijklmnopqrstuvwxyz";
for (int r = 11; r < 36; r++) {
cout << r << "进制转换为:";
long long d = 0;
a = num;
while (a != 0) {
b = a % r;
a /= r;
d++;
n[d] = b;
}
for (int i = d; i >= 1; i--) {
if (n[i] > 9) {
cout << zifu[n[i]];
}
else {
cout << n[i];
}
}
cout << endl;
}
}

可能你会觉得太麻烦了,一个一个看过去万一看错了怎么办,没事,还有一个更直观的方法,加个bool类型的变量来判断
#include <bits/stdc++.h>
using namespace std;
long long a, b, n[10001];
int main() {
long long num = 8100178706957568;
for (int r = 11; r < 36; r++) {
cout << r << "进制转换为:";
long long d = 0;
a = num;
while (a != 0) {
b = a % r;
a /= r;
d++;
n[d] = b;
}
bool flag = true;
for (int i = d; i >= 1; i--) {
if (n[i] > 9) {
flag = false;
}
}
cout << flag << endl;
}
}

综上所述,答案是32,如果有更好的方法,欢迎前来探讨