找到大于或等于n的k的最小重数

时间:2019-04-11 14:25:34

标签: python-2.7

是否可以在没有if语句的情况下找到大于或等于n的k的最小多重性? 换句话说,可被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

2 个答案:

答案 0 :(得分:0)

滥用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 % k0,则意味着我们要选择n。否则,int(bool(n % k))将变为1,这意味着将选择n - n % k + k

答案 1 :(得分:0)

这可以解决问题

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