文档章节

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

Maxwell1987
 Maxwell1987
发布于 2015/02/05 10:08
字数 490
阅读 98
收藏 0

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


© 著作权归作者所有

共有 人打赏支持
Maxwell1987
粉丝 23
博文 75
码字总数 40209
作品 0
济南
程序员
私信 提问
加载中

评论(3)

blu10ph
blu10ph

引用来自“blu10ph”的评论

ceil?~

引用来自“Maxwell1987”的评论

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

引用来自“blu10ph”的评论

ceil?~
文章这种是跨语言的,当然局限性就是整数。
blu10ph
blu10ph
ceil?~
我是如何一步步拿下 Google Offer 的?

作者 | Prajakta Tathavadkar 译者 | 弯月 责编 | 仲培艺 出品 | CSDN(ID:CSDNNews) 与其他众多的技术人员一样,从一开始 Google 就是我梦寐以求的公司。 此次在我通过 Google 的面试后,...

CSDN资讯
01/17
0
0
Python入门之你必须了解的基础知识

一:python的安装与一生中的第一个程序 要写python程序必须要安装python啊!我以为是直接写呢,晕。我还是先去看看资料为什么要先安装python。通过查询我知道了,原来计算机程序分几种,1种是...

番茄炒蛋
2011/05/20
10
0
SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。

  这是一篇2010年比较古老的文章了,是在QQ群里一位群友提到的,无聊下载看了下,其实也没有啥高深的理论,抽空实现了下,虽然不高大上,还是花了点时间和心思优化了代码,既然这样,就顺便...

Imageshop
2018/06/03
0
0
css3动画高级应用开发唱吧首页图片飞入效果

知识点: html/css布局思维,定位、浮动详解,css3动画高级应用,过渡属性解析,js应用,企业布局思维运用,开发标准等。 唱吧首页飞入效果源码如下: 小建议: 用好互联网 在你开始学习编程的...

急速奔跑中的蜗牛
2017/10/28
0
0
埃及对数学的贡献—数学起源(一)

数学是人类文明的重要标志之一,“数学”的概念远远早于文字。说句官话,“数学是劳动人民在生产实践中发明创造的”。下图是考古学者在刚果发现的一截猴骨,上面刻有三列、16组痕迹,距今2万...

fnqtyr45
2017/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C#默认OrderBy()函数的排序问题

昨天在客户现场遇到一个很奇葩的问题,猜下下面代码的排序输出是什么: static void Main(){ List<string> strs = new List<string>(){"11", "12", "1:"}; foreach(string str i......

Airship
29分钟前
2
0
Vue调试神器Vue.js devtools

前言: Vue.js devtools是一个高效的vue项目可视化检查工具,其主要功能就是可以快速查看页面结构、组件中的data变量、computed计算属性、props父组件传过来的值等等 Chrome上的使用方法: 科学...

JamesView
34分钟前
14
0
最全面的IGMP协议总结!

IGMP互联网组管理协议是TCP/IP 协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。 一、IGMP 简介 IGMP(Internet Group Management...

linuxprobe16
38分钟前
1
0
node-sass 安装失败的各种坑

开始的时候引入别人的一个项目 npm install npm run dev 启动项目 报错 > sell@1.0.0 dev E:\web_hwf\Vue\02app > node build/dev-server.js Listening at http://localhost:8888 webpack: w......

黑魔法
40分钟前
1
0
Qemu中PCI设备透传(PCI-Assign)源码分析

在网上看到很多人说Qemu的PCI-Assign透传不支持IOMMU,而VFIO透传却可以(还被当做一种优势进行推荐)。而VFIO跟SRIOV并非有必然联系,那就是说VFIO和PCI-Assign进本都是靠软件实现的了?既然...

LastRitter
42分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部