转换的原理参考:九度OJ 十进制VS二进制
核心代码如下,包括两个初始化函数,1个判断函数,1个转换函数
//把int转成char,用于输出
map<int,char> mp;
//把char转成int,用于计算
map<char,int> mpci;
void init(){
for(int i=0;i<10;i++){
mp[i]='0'+i;
}
for(int i=10;i<36;i++){
mp[i]='a'+i-10;
}
}
void init_ci(){
for(int i=0;i<10;i++){
mpci['0'+i]=i;
}
for(int i=10;i<36;i++){
mpci['a'+i-10]=i;
}
}
string tolower(string s){
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z'){
s[i]=s[i]-'A'+'a';
}
}
return s;
}
//用于判断这个串是不是全0串
bool judge(string s){
int len=s.size();
for(int i=0;i<len;i++){
if(s[i]!='0')
return 1;
}
return 0;
}
//把n进制的大数转成m进制的大数
string change(string s,int n,int m){
if(judge(s)==0)
return "0";
string ans="",r="";
int d=0;
while(judge(s)){
int len=s.size();
//一次这样的for循环,相当于求一次商和余数
for(int i=0;i<len;i++){
//存商
r+=mp[(d*n+mpci[s[i]])/m];
//存余数
d=(d*n+mpci[s[i]])%m;
}
s=r;
// 清空商
r="";
//把余数一个个地加到ans里
ans+=mp[d];
//清空余数
d=0;
}
//最后转置一番,就可以获取正确的转换后的数字
reverse(ans.begin(),ans.end());
return ans;
}