[每天一个知识点]24-编程技巧-如何简单计算分页等需要进1的除法

本文通过几个具体的例子,介绍了如何在编程中正确处理整数除法运算,特别是当需要进行向上取整时的处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常遇到这种场景,一个盒子可以装5台肾6,要偷偷带走21台肾6需要多少个盒子?或者一页纸可以记7个妹子的电话号码,要记20个妹子的电话号码需要准备多少张纸?当然,更现实的可能是web页面上一页显示n条记录,x条记录需要分多少页显示。

要精确计算当然是

double pages = (double)x / n;

你就能得到1.5页或者是3.1415929页这种奇怪的数值了,不过你的老板可能会嫉妒你的算术水平,会要求你得到2或者4的结果,这时候怎么办?难道用

int pages = x / n + 1;
这样吗?貌似看起来可能大概还是能正常工作的,好像解决了这个问题……等等,当x能被n整除的时候好像是不该+1的,这可怎么办呢,代码改成这样吧

int pages = (x % n == 0) ? x / n : x / n + 1;
这回代码果然能用了,只是看起来好像有点复杂,还是使用这个简单的方法吧

int pages = (x + n - 1) / n;
道理很简单,利用整数除法去尾的特点,如果x本来不能整除n加上n-1之后就会使结果加1,如果x本来能够整除n那增加的n-1会被去尾结果保持不变。


PS1:开篇的问题,要记20个妹子的电话需要20张纸,否则你会被妹子打死的。

PS2:如果有355条记录,每页显示113条,需要的页数是3.1415929,这个叫密率,祖冲之的计算结果。

PS3:不用考虑倒数第二种写法与最后一种写法的效率问题,人类可读更重要,程序效率差距微乎其微。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值