任意进制转换

Categories: 数据结构和算法
Comments: No Comments
Published on: 2011 年 11 月 09 日

当我们把十进制转成二进制的时候,我们通过辗转相除,取余,逆置余数序列的过程得到新的进制的数。因此我们可以借助这种思想把M进制转成N进制的数。网上流传的一篇不能进行10进制以上的任意传化,不过进制转化思想就这样,稍微修改即可。
如下是C的详细的实现方法

#include<iostream>
using namespace std;
void m2n(int m, char* mNum, int n, char* nNum) 
{
	int i = 0,temp;
	char c, *p = nNum;
	//这是一个考察地方,是否能用最少乘法次数。
	while (*mNum != '\0')
		i = i*m + *mNum++ - '0';
	//辗转取余
	while (i) {
		temp=i%n;
		if(temp>9) *p++=temp-10+'A';
		else *p++ = temp + '0';
		i /= n;
	}
	*p-- = '\0';
	//逆置余数序列
	while (p > nNum) {
		c = *p;
		*p-- = *nNum;
		*nNum++ = c;
	}
}
int main(){

	char* a="255";
	char b[100];
	m2n(10,a,2,b);
	cout<<b;
}

我猜你可能也喜欢:

No Comments - Leave a comment

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


Welcome , today is 星期二, 2017 年 10 月 24 日