题目
代码
#include <bits/stdc++.h>
using namespace std;
// 定义一个字符串 str,其内容为 "8100178706957568"
string str = "8100178706957568";
// 函数 check 用于检查传入的字符串是否全部由数字组成
bool check(const string& str) {
// 遍历字符串中的每一个字符
for (char c : str) {
// 如果当前字符不是数字,则返回 false
if (c < '0' || c > '9') return false;
}
// 如果遍历完成都没有发现非数字字符,则返回 true
return true;
}
// 函数 trans 用于将十进制的字符串表示转换为任意进制(不超过36进制)
string trans(int digit, const string& str) {
// 初始化一个长整型变量用于存放十进制数值
long long num = 0;
// 遍历字符串中的每一个字符
for (char c : str) {
// 将每一位字符转换为对应的数值,并累加到 num 变量中
num = num * 10 + (c - '0');
}
// 初始化一个空字符串,用于存放转换后的结果
string result = "";
// 当 num 大于0时循环执行以下操作
while (num > 0) {
// 计算 num 对 digit 的余数
int remainder = num % digit;
// 由于我们只关注数字,这里直接使用 remainder 并将其添加到结果字符串的前端
result = char('0' + remainder) + result;
// 将 num 除以 digit,继续下一轮计算
num /= digit;
}
// 返回转换后的结果字符串
return result;
}
// 主函数
int main() {
// 从11进制开始逐个尝试到36进制
for (int digit = 11; digit <= 36; digit++) {
// 调用 trans 函数,尝试将 str 转换为 digit 进制
string result = trans(digit, str);
// 使用 check 函数检查转换后的字符串是否只包含数字
if (check(result)) {
// 如果是,则输出该进制值
cout << digit << " ";
}
}
// 程序正常结束并返回0
return 0;
}
#include<bits/stdc++.h>
using namespace std;
// 定义一个字符串str,其内容为"8100178706957568"
string str = "8100178706957568";
// 这个函数用于检查传入的字符串是否全部由0到9的数字组成
bool check(string str)
{
// 遍历字符串中的每一个字符
for(int i = 0; str[i] != '\0'; i++)
{
// 如果当前字符减去字符'0'小于0或者大于9,则说明该字符不是0-9之间的数字
if(str[i] - '0' < 0 || str[i] - '0' > 9) return false;
}
// 如果所有字符都是0-9之间的数字,则返回true
return true;
}
// 这个函数用于将一个十进制数转换为任意指定进制的数(进制范围从11到36)
string trans(int digit, string str)
{
long long num = 0;
// 遍历字符串中的每一个字符
for(int i = 0; str[i] != '\0'; i++)
{
// 将字符串中的字符逐位转换为数字,并累加起来形成原数值
num *= 10;
num += str[i] - '0';
}
// 初始化一个空字符串用于存储转换后的结果
string result = "";
// 循环进行转换,直到原数值为0
while(num)
{
// 取出当前数值对目标进制取模的结果,并转化为相应的字符
int tmp = num % digit;
// 将新的字符添加到结果字符串的最前面
result = (char)('0' + tmp) + result;
// 更新原数值
num /= digit;
}
// 返回转换后的字符串
return result;
}
// 主函数
int main()
{
// 遍历11到36的所有进制
for(int digit = 11; digit <= 36; digit++)
{
// 调用trans函数将字符串str表示的十进制数转换为目标进制数
string result = trans(digit, str);
// 检查转换后的字符串是否全由0-9的数字组成
if(check(result))
// 如果是则输出这个进制
cout << digit;
}
// 返回0表示程序正常结束
return 0;
}