smp*_*p7d 4 algorithm math pseudocode
给定两个正整数x和y,我需要找到大于或等于x的下一个数字,它是y的倍数.
例如:
x = 18,y = 3 => 18
要么
x = 18,y = 5 => 20
要么
x = 121,y = 25 => 125
我的第一个想法是继续增加x直到我找到一个匹配但是对于高y值来说效率相当低.
然后我想到了,x - (x % y) + y但如果x是y的倍数,那就无法工作.当然,我总是可以使用公式中的三元运算符进行调整x - ((x % y)==0?y:x % y) + y.
有没有人有任何好的,聪明的,简单的建议或完整的解决方案比我所提到的更好?我错过了逻辑中明显的东西吗?
我将使用Java(这是一个更大的算法的一小部分),但如果它是全直的数学,伪代码将同样有用.
如果x并且y是积极int的,那么这将起作用:
y * ((x-1)/y + 1);
Run Code Online (Sandbox Code Playgroud)
使用它x-1可以让你不必担心特殊情况时x的倍数y.例如,if y = 5,then for 16 <= x <= 20,
15 <= x-1 <= 19
(x-1)/y == 3
(x-1)/y+1 == 4
y*((x-1)/y+1) == 20
Run Code Online (Sandbox Code Playgroud)