任意进制转换

10 → \to n

算法描述

使用短除法可以将十进制转换为任意进制,我们可以使用循环或者递归来模拟这一过程。
2 ∣ 313 ‾ 1 2 ∣ 156 ‾ 0 2 ∣ 78 ‾ 0 2 ∣ 39 ‾ 1 2 ∣ 19 ‾ 1 2 ∣ 9 ‾ 1 2 ∣ 4 ‾ 0 2 ∣ 2 ‾ 0 2 ∣ 1 ‾ 1 2|\underline{313}\quad1\\ \quad 2|\underline{156}\quad0\\ \qquad 2|\underline{78}\quad0\\ \qquad\quad2|\underline{39}\quad1\\ \qquad\qquad2|\underline{19}\quad1\\ \qquad\qquad\quad2|\underline{9}\quad1\\ \qquad\qquad\qquad2|\underline{4}\quad0\\ \qquad\qquad\qquad\quad2|\underline{2}\quad0\\ \qquad\qquad\qquad\qquad2|\underline{1}\quad1\\ 2313121560278023912191291240220211

递归

void transbits(int bits, int num, char* str, int& flag)
{
    if (!num) return;
    transbits(bits, num / bits, str, flag);
    str[flag++] = char(num % bits + 48);
}

利用递归的特点可以使数字倒着存放,不能转换16进制,因为 A S C ASC ASC数字和字母不连着。

循环

void transbits(int bits, int num, string &str)
{
    while(num!=0)
    {
    	str.insert(str.begin(),char(num%bits+48));
    	num/=bits;
	}
}

n → \to 10

将每一位和权相乘再相加

int transtoten(int bits,string str)
{
	int sum=0;
	for(int i=str.size()-1;i>=0;i--)
		sum+=((int)str[i] - 48)*pow(bits,(str.size()-i-1));
	return sum;
}
  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值