进制转换算法 抛弃大数据计算 再大的数也能控制在int范围内
转换流程:

进制转C++代码示例
#include <iostream>
void base_conversion(const char* source, int source_base, char** aims_return, int aims_base)
{
char* aims = NULL;
int source_length = strlen(source);
int* data = (int*)malloc(source_length * sizeof(int));
for (int i = 0; i < source_length; i++)
{
if (source[i] >= 'A' && source[i] <= 'Z')
{
data[i] = source[i] - 'A' + 10;
}
else if (source[i] >= 'a' && source[i] <= 'z')
{
data[i] = source[i] - 'a' + 10;
}
else
{
data[i] = source[i] - '0';
}
}
int d;
bool b;
int* output = NULL, k = 0;
do
{
b = false;
for (int i = 0; i < source_length; i++)
{
d = data[i] / aims_base;
if (d != 0)
{
b = true;
}
if (i == source_length - 1)
{
output = (int*)realloc(output, (k + 1) * sizeof(int));
output[k] = data[i] % aims_base;
k++;
}
else
{
data[i + 1] += (data[i] % aims_base) * source_base;
}
data[i] = d;
}
} while (b);
aims = (char*)malloc((k + 1) * sizeof(char));
aims[k] = '\0';
for (int i = 0; i < k; i++)
{
if (output[k-i-1] >9)
{
aims[i] = output[k - i - 1] + 'A' - 10;
}
else
{
aims[i] = output[k - i - 1] + '0';
}
}
*aims_return = aims;
if (data != NULL)
{
free(data);
}
}
int main()
{
int source_base = 0;
std::cout << "输入原进制:";
std::cin >> source_base;
while (getchar() != 10);//清空输入缓冲区
std::cout << "输入数值:";
std::string str;
std::cin >> str;
char* data = NULL;
for (int i = 2; i <= 36; i++)//转换2至36进制
{
base_conversion(str.c_str(), source_base, &data, i);
std::cout << "转换为" << i << "进制:" << data << std::endl;
free(data);
data = NULL;
}
}