计算机求解10进制转换任意进制
我们在高中必修三的数学书中,给的算法思想就是除k取余数法,先一直除,直到小于除数为止。
原理证明
n进制转化为10进制可表示为(n进制上的每一位都不会超过n)
\[(a_1 a_2 \dots a_m)_{(n)} = \sum _{k=1}^{m} a_{k}n^{m-k}
\]
这个时候,通过除以n,那么其他的项均是可以整除的,所以这里只留下最后一项不能被整除,用数学表示这个过程:
\[\frac {\sum _{k=1}^{m} a_{k}n^{m-k}}{n} = \sum _{k=1}^{m-1} a_{k}n^{m-k-1} + a_m/n
\]
知\(a_m/n\)无法被整除,所以余数即为最后一位,这时候再继续这个过程m次,直到\(\sum _{k=1}^{m} a_{k}n^{m-k}\)这部分为0的时候,我们就已经获得了所有位上的值。结束
下面是给出这个问题的算法代码求解
方法一:除k取余数法(递归)
下面用的是python的递归伪代码
def to_base_n(x: int, base: int):
x == 0 -> ""
r = x % base
x >= base -> to_base_n(x // base, base) + str(r)
return str(r)
方法二:除k取余数法(非递归)
这里给出的是python非递归的伪代码
def decimal_to_base(dividend: int, base: int):
dividend == 0 -> "0"
digits = "0123456789ABCDEF"
result = ""
while {dividend > 0: dividend // base}:
result = digits[dividend % base] + result # 加在字符左边,即反
return result
方法三:位运算
这种方法仅使用于特定情况,例如转化为2进制,或者其他2幂次的进制
def decimal_to_binary_bitwise(n):
n == 0 -> "0"
binary = ""
while {n:n>>1}:
binary = str(n & 1) + binary
return binary
本文来自博客园,作者:doctordragon666,转载请注明原文链接:https://www.cnblogs.com/riverstream/p/-/mod-method-covert-base

浙公网安备 33010602011771号