2017-01-19 17 views
2

我想将任何正整数转换为一些基地从29。 为基数2输出应该是:整数转换为给定的基地

0 -> enlist 0 
1 -> enlist 1 
31 -> 1 1 1 1 1 
62 -> 1 1 1 1 1 0 
63 -> 1 1 1 1 1 1 
64 -> 1 0 0 0 0 0 0 

我开发了这个

convertToBase: reverse {[x;base;result] 
    result,: `int$x mod base; 
    x-: last result; 
    x%: base; 
    $[x=0;result;.z.s[x;base;result]] 
}; 

//invocation 
convertToBase[62;2;()] 

的问题是下一个功能,如果有任何内建Q功能,有效地做到这一点?如果没有,如何优化解决方案?

回答

3

如果左侧参数是数字,则vs函数会执行此操作。

例如:

2 vs 100 

将返回:

1 1 0 0 1 0 0 

在你有0作为右边的参数会,然而,返回一个空列表的情况下,但你可以用输出的条件包装它,如果返回值为空,则返回0。

+0

谢谢保罗。你使用哪个版本的Q.我尝试了3.2和3.3并得到了'nyi'。是3.4吗? –

+0

我目前使用kdb + 3.4 2016.06.14,是的。直到最近我还没有机会使用这个成语,所以我从来没有在旧版本上进行过测试。 –

+0

谢谢你的回复,很好的功能,坏的不在<3.4。 –