#include #include #include #include bool base_check(const std::string& str, int base) { if (base < 2 || base > 36) return false; static const std::unordered_map baseDigits = []{ std::unordered_map m; for (int b = 2; b <= 36; ++b) { std::string digits; for (int i = 0; i < b; ++i) digits += (i < 10) ? ('0' + i) : ('a' + i - 10); m[b] = digits; } return m; }(); const std::string& digits = baseDigits.at(base); for (char c : str) { char lc = std::tolower(static_cast(c)); if (digits.find(lc) == std::string::npos) return false; } return true; } int main() { std::cout << (base_check("10101", 2) ? "valid" : "invalid") << '\n'; return 0; }