2017-01-19 83 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。 –