Найти наименьшую кратность k, большую или равную n

#python-2.7

#python-2.7

Вопрос:

Возможно ли найти наименьшую кратность k, большую или равную n, без оператора if?, другими словами, наименьшее число, делимое на k, большее или равное n.

Я ищу выражение без условия (также без тройного оператора и так далее).

Например,

 n = 78, k = 10 -----> 80
n = 80, k =10 -------> 80
n = 13, k = 3 -------> 15
n = 14, k =2 ----> 14
n=13, k = 11 ----> 22
  

Комментарии:

1. Почему ? это домашнее задание?

Ответ №1:

Это может сделать трюк

 x = ((n // k)   (n % k != 0)) * k
  

Ответ №2:

Злоупотребление тем фактом, что bool может быть преобразовано в int :

 tests = [(78, 10), (80, 10), (13, 3), (14, 2), (13, 11)]

for n, k in tests:
    print([n, n - n % k   k][int(bool(n % k))])
  

выводит

 80
80
15
14
22
  

Объяснение

[n, n - n % k k] просто создает список. «Хитрость» заключается в используемой нами индексации: если n % k 0 это означает, что мы хотим выбрать n . В противном случае int(bool(n % k)) станет 1 , какие средства n - n % k k будут выбраны.