Java两整数相除向上取整

Java两整数相除向上取整前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11除以3的结果是3。然而,某些情况下(eg.把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢?方式一:添加三目运算符逻辑代码x/y+(x%y!=0?1:0);这种方法逻辑上很简单,如果x可以整除y,就将x/y的结果加0,不能整除y就将x/y的结果加1。方式二:使用ceil函数(int)Math.ceil((double.

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

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

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

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是会被舍去的。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中%c%n是什么意思_在编码时如何使用\r与\n,两者的区别

    java中%c%n是什么意思_在编码时如何使用\r与\n,两者的区别\r与\n到底有何区别,编码的时候又应该如何使用,我们下面来了解一下。区别:\r:全称:carriagereturn(carriage是“字车”的意思,打印机上的一个部件)简称:return缩写:rASCII码:13作用:把光标移动到当前行的最左边\n:全称:newline别名:linefeed缩写:nASCII码:10作用:把光标向下移动一行不同操作系统怎样表示“回车+换行”(即一行的结…

    2022年7月8日
    31
  • 影视站长必备资料合集

    影视站长必备资料合集苹果cms最新程序官方网盘:https://www.lanzous.com/u/magicblack推荐使用卧龙资源:http://wolongzy.net(速度快,稳定)共有资源30719+八戒资源站http://zy.bajieziyuan.com(秒播)共有资源20308+麻花资源资源站http://www.mahuazy.ne…

    2022年10月19日
    3
  • Spring配置中context:annotation-config VS context:component-scan

    Spring 中在使用注解(Annotation)会涉及到< context:annotation-config> 和 < context:component-scan>配置,下面就对这两个配置进行诠释。

    2022年2月26日
    41
  • Fastai安装_fastai

    Fastai安装_fastai本文为译文,主要介绍安装问题。Fastaigithub原文地址:https://github.com/fastai/fastai/blob/master/README.md#is-my-system-supported注意事项:fastaiv1目前只支持Linux,并且需要PyTorchv1和Python3.6或更高版本。Windows还处于试验阶段:应该可以很好地工作,但还没有全面的测…

    2025年10月8日
    7
  • Bozz Nuster_Collectivum XXVIII

    Bozz Nuster_Collectivum XXVIII这篇文章主要讲的是在Libprotobuf-mutator与LibFuzzer联合使用的基础上,加上custommutator功能。首先需要明确的是为什么要这么做,那么假设b字段只有为”FUZZ”或”PWN”两个字符的时候才能进入下一个程序分支的情况,当然LibFuzzer也可以在代码覆盖率的加持下进入下一个程序分支,但如果你通过逆向的方式已经知道了这个关键点,难道还需要等LibFuzzer跑出这两个字符串吗?

    2025年11月7日
    3
  • java删除文件内容_java 删除文件中的数据[通俗易懂]

    java删除文件内容_java 删除文件中的数据[通俗易懂]展开全部32313133353236313431303231363533e78988e69d83313333373962311、如果只是想要文件中的内容,可以使用如下代码:FileOutputStreamfs=newFileOutputStream(newFile(“C:\\buyterms.txt”));2、如果是想要文件夹中的内容,可以使用如下代码:packagecom.xx;im…

    2022年6月12日
    110

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号