进制转换
非负整数
2-36进制数的字符串转换为10进制long类型整数
10进制long类型整数转换为2-26进制的字符串
注意:在使用ChangeBaseTo10()之前要先调用一次void initValueTab()
map<char,int> valueTab;
char charTab[40] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void initValueTab();
long ChangeBaseTo10(const string &sourNum, int sourBase);
void PrintNumByBase(long sourNum, int sourBase);
//测试完毕,看起来正常, 0也正常
long ChangeBaseTo10(const string &sourNum, int sourBase){
long r=0;
int weight = 1;
for(int i=sourNum.size()-1; i>=0; i--){
r += valueTab[sourNum[i]]*weight;
weight*=sourBase;
}
return r;
}
//测试完毕,看起来正常, 0也正常
void PrintNumByBase(long sourNum, int sourBase){
stack<char> r;
while(sourNum>0){
r.push(charTab[sourNum%sourBase]);
sourNum=sourNum/sourBase;
}
if(r.empty())
putchar('0');
while(!r.empty()){
putchar(r.top());
r.pop();
}
putchar('\n');
}
void initValueTab(){
valueTab['0']=0;
valueTab['1']=1;
valueTab['2']=2;
valueTab['3']=3;
valueTab['4']=4;
valueTab['5']=5;
valueTab['6']=6;
valueTab['7']=7;
valueTab['8']=8;
valueTab['9']=9;
valueTab['A']=10;
valueTab['B']=11;
valueTab['C']=12;
valueTab['D']=13;
valueTab['E']=14;
valueTab['F']=15;
valueTab['G']=16;
valueTab['H']=17;
valueTab['I']=18;
valueTab['J']=19;
valueTab['K']=20;
valueTab['L']=21;
valueTab['M']=22;
valueTab['N']=23;
valueTab['O']=24;
valueTab['P']=25;
valueTab['Q']=26;
valueTab['R']=27;
valueTab['S']=28;
valueTab['T']=29;
valueTab['U']=30;
valueTab['V']=31;
valueTab['W']=32;
valueTab['X']=33;
valueTab['Y']=34;
valueTab['Z']=35;
}