查找下一个多个的算法

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(这是一个更大的算法的一小部分),但如果它是全直的数学,伪代码将同样有用.

Joh*_*nPS 5

如果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)

  • 我一直认为`y*((x + y-1)/ y)`比那更好.值相同,形式稍微清晰. (3认同)