今天看《程序员数据》一书时看到一个很基数有很有用的数学题。将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))