2017-01-19 3 views
2

Я хочу преобразовать любое положительное целое число в некоторую базу от 2 до 9. Выход на базе 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. –

Смежные вопросы