进制转换

非负整数
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;
}
posted @ 2022-04-19 18:17  enbug  阅读(4)  评论(0编辑  收藏  举报