十进制转其他进制

众所周知,十进制转其他进制使用的算法是除基取余法。
在这里插入图片描述
代码描述就是:

int z[50],cnt=0;
do{
	z[cnt++]=y%q;	//转为q进制数
	y/=q;
}while(y!=0);

这样z数组从高位z[num-1]到低位z[0]即为Q进制z。
不使用while而使用do…while的原因:如果y恰好等于0,那么并没有把z[0]赋为0,且num也没有自加。因此确定y为正数的情况下,就可以用while,否则用do…while。

甚至还可以用递归算法:
在这里插入图片描述
C语言库函数中的itoa函数也可以实现将int型十进制数转换为其他进制。

但是如果需要转换的十进制数并不能用基本类型表示呢(位数比较多)。该十进制数需要用int型或char型数组表示。那么除基取余算法就需要使用高精度的除法运算和取余运算。
代码如下:

string converse(int m,string a,int n){	//将m进制的数a转换为n进制 
	int k,t;
	string b="";
	for(int i=0;i<a.size();){
		k=0;		//上一位遗留的余数 
		for(int j=i;j<a.size();j++){
			t=(k*m+a[j]-'0')%n;
			a[j]=(k*m+a[j]-'0')/n+'0';
			k=t;
		}
		b+=to_string(k);		//余数
		while(a[i]=='0') i++;	//清除前置0 
	}
	reverse(b.begin(),b.end());	//倒转 
	return b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值