首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java两整数相除向上取整

Java两整数相除向上取整

作者头像
全栈程序员站长
发布2022-09-10 10:29:01
发布2022-09-10 10:29:01
4.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11 除以 3 的结果是 3。然而,某些情况下(eg. 把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢?

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

代码语言:javascript
复制
x / y + (x % y != 0 ? 1 : 0);

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

方式二:使用ceil函数

代码语言:javascript
复制
 (int)Math.ceil((double)x/y);
 // 或者
 (int)Math.ceil(x * 1.0 /y);

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

方式三:其他逻辑

代码语言:javascript
复制
(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是会被舍去的。

最后总结 第一种方法:最简单、清楚,是比较推荐的; 第二种方法:虽然常见,但是涉及过多类型转换,个人不推荐 第三种方法:很巧妙,不太容易理解,也是推荐的

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151821.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式一: 添加三目运算符逻辑代码
  • 方式二:使用ceil函数
  • 方式三:其他逻辑
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档