本质上和求N的任何K进制的转化一样的做法。求得余数r=N%K
作为当前最低位的数字,然后将N=(N-r)/K
作为下一个循环的初始值直至为零。把所有的数字拼接起来倒序输出就是K进制的结果。
特别注意,余数r必须是正数,也就是说无法除尽的时候,采用的是向下取整。比如说(-5)/(-3),依据严格的数学定义,商是2,余数是1.
但是,当除数是负数的时候,不同语言的运算规则会不一样。在C++/Java里面,整数的除法都是向零取整。比如说(-5)/(-3),结果商是1,余数是-2.这个余数因为是负数,是无法用来作为进制转换结果的。解决方案是:将商加上一,余数加上abs(K)。这样就转变成了向下取整的结果,余数也变成了正数。在这个例子中,结果商就是2,余数是1.
事实上,在wiki里面已经明确写明了negative base calculation的方法:https://en.wikipedia.org/wiki/Negative_base#Calculation