基数转换

今天看《程序员数据》一书时看到一个很基数有很有用的数学题。将10进制数转为其他进制的数,和将其他进制的数转为10进制,这成为基数转换。

个人看书习惯,看到东西后要实践一下,所以编程实现了这个问题。以下为代码,记一下,方便以后要用的时候拿来用。

-- 十进制转其他进制(最高支持16进制)
function desimalismToOther(number, scale)
	local dividend = number
	local result = ""

	local divisor = scale
	local numberRange = "0123456789ABCDEF"

	while (dividend ~= 0) do
		local remainder = dividend % divisor
		result = result .. string.sub(numberRange,remainder+1, remainder+1)
		dividend = math.floor(dividend / divisor)
	end

	return string.reverse(result)
end

-- 其他进制转十进制(最高支持16进制)
function otherToDesimalism(numberStr,base)
	local numberRange = "0123456789ABCDEF"

	local numberStr = string.upper(numberStr)
	local sum = 0
	local n = string.len(numberStr)
	for i=1, n do
		local placeChar = string.sub(numberStr,i, i)
		local k = string.find(numberRange,placeChar)
		sum = sum + (k-1)*(base^(n-i))
	end
	return sum
end


print(desimalismToOther(12,2))
print(otherToDesimalism("78",16))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值