M进制转换成N进制思想

    先把M进制转换成十进制,再把十进制转换成N进制。

#include <iostream> 
#include <math.h> 

using namespace std; 

char index[62] = 
{ 
	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
	'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
	'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
	'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
	'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
	'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
	'y', 'z'
}; 

int getValue(char ch)
{
	if(ch>='0'&&ch<='9') 
		return ch-'0';
	else if(ch>='A'&&ch<='Z') 
		return ch-'A'+10;
	else 
		return ch-'a'+36;
}

unsigned int M2Ten(const char* cInput, int cLen, int iHex)
{
	const char* p = cInput;
	int len = cLen-1;
	unsigned int sum = 0;  
	while( *p != '\0' )
	{
		sum += getValue(*p)*(unsigned int)(pow((double)iHex,(double)len)); 
		len --; 
		p++; 
	}
	return sum; 
}

string Ten2N(unsigned int iInput, int iHex)
{
	unsigned int  r;
	unsigned int  q;
	q = iInput;
	string strSum; 
	while( q != 0 ) 
	{
		r = q % iHex;
		q = q / iHex; 
		strSum.insert(0, 1, index[r]);
	}
	return strSum; 
}

int main( int argc, char* argv)
{
	char inputM[20]={0};
	cout << "input num:";
	cin >> inputM;
	cout << "input hex:";
	int iHex;
	cin >> iHex;
	unsigned int result = M2Ten(inputM, strlen(inputM), iHex) ;  
	cout << result << endl; 
	string strResult = Ten2N(result, iHex) ; 
	cout << strResult.c_str() << endl;
	getchar();
	getchar();
	return 0; 
}


 

这种算法只能处理“无符号整型范围类的数据”,对于大数,则是处理不了的,具体的方法可参考下面这个链接:

http://hi.baidu.com/wangxustf/item/45f8f61c26694ffa64eabfc6

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值