[每天一个知识点]24-编程技巧-如何简单计算分页等需要进1的除法
[每天一个知识点]24-编程技巧-如何简单计算分页等需要进1的除法
Maxwell1987 发表于3年前
[每天一个知识点]24-编程技巧-如何简单计算分页等需要进1的除法
  • 发表于 3年前
  • 阅读 68
  • 收藏 0
  • 点赞 1
  • 评论 3

新睿云服务器60天免费使用,快来体验!>>>   

我们经常遇到这种场景,一个盒子可以装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:不用考虑倒数第二种写法与最后一种写法的效率问题,人类可读更重要,程序效率差距微乎其微。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 18
博文 41
码字总数 22080
评论 (3)
blu10ph
ceil?~
Maxwell1987

引用来自“blu10ph”的评论

ceil?~
文章这种是跨语言的,当然局限性就是整数。
blu10ph

引用来自“blu10ph”的评论

ceil?~

引用来自“Maxwell1987”的评论

文章这种是跨语言的,当然局限性就是整数。
喵~~
×
Maxwell1987
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: