Java两整数相除向上取整

Posted 默慊$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java两整数相除向上取整相关的知识,希望对你有一定的参考价值。

方式一: 添加三目运算符逻辑代码

x / y + (x % y != 0 ? 1 : 0);

这种方法逻辑上很简单,如果x可以整除y,就将x / y 的结果加0,不能整除y就将x / y 的结果加1。

方式二:使用ceil函数

(int)Math.ceil((double)x/y);
// 或者
(int)Math.ceil(x * 1.0 /y);

首先,将被除数转换成double类型,再将计算的结果通过Math.ceil()函数向上取整,这种方式是网上经常可以看到的方式。

方式三:其他逻辑

(x + y - 1) / y

这种方式为什么可以达到向上取整的效果呢,为什么x要加y - 1?

为了方便理解,我们通过具体的计算来说明。

1.对于可以整除的情况

x = 9,y = 3

(x + (y - 1)) / y,x加上了一个比y小的数,最终(x + (y - 1)) / y = (x / y) ...y - 1

商为(x / y), 余数为(y - 1),余数相当于两数相除结果都小数部分,会被舍去,最终(x + (y - 1)) / y` = (x / y)

2.对于不可以整除的情况

x = 11, y = 3

11 / 3 = 3 ... 2

x + (y - 1) = (3 * 3 + 2) + (3 - 1) = (3 * 3 + 2 - 1)+ 3= (3 * 3 + 3) + 2 - 1

x + (y - 1) / y = ((3 * 3 + 3) + 2 - 1 )/ 3 = 4

就是x不能整除y余数肯定在1到y - 1之间,从中取出1给y - 1,使得被除数增加了一个y,进而商会增加1,余数部分为0到y - 2是会被舍去的。

总结

第一种方法:最简单、清楚,比较推荐;

第二种方法:虽然常见,但是涉及过多类型转换,不推荐

第三种方法:很巧妙,不太容易理解,也是推荐的

以上是关于Java两整数相除向上取整的主要内容,如果未能解决你的问题,请参考以下文章

java的int的两个类型相除,结果怎么取舍

Python中获取两数相除的商和余数

辗转相除法

最大公约数和最小公倍数

C语言中除法和取整分别怎么做

js取整数取余数的方法