日期:2014-05-18  浏览次数:20409 次

一个小学数学的问题
如果数据共有N条,采用分页显示,每页显示M条,请问一共有多少页?请给出公式
count = (N%M==0)?(N/M):(N/M + 1)这个做法是比较直观的思路。得出的结果是完全正确的。这个方案需要一个%运算,一个判断运算,一个除法,而乘除、取余要比加减法效率低太多。 如果用另外一种算法,可以减少一次乘除(取余),而且不用if..else...判断,当然也不用三元去运算符? : 。权当锻炼脑子了,如何设计一个比这个方法效率更高的公式?

------解决方案--------------------
用汇编,可以同时得到商和余
------解决方案--------------------
n / m + n % m == 0 ? 0 : 1
------解决方案--------------------
用AspNetPager控件,或者PagedDataSource类分页,会自动算出分多少页。

这个也可以,效率不一定高。
count = (int)Math.Ceiling(N/M);
------解决方案--------------------
给一种写法上简单的代码:

0 - Math.Floor((0.0 - n) / (double)m)
------解决方案--------------------
就是为了解决余数是0的情况不要算那页的问题吧,减少一点点被除数应该可以
------解决方案--------------------
探讨
用AspNetPager控件,或者PagedDataSource类分页,会自动算出分多少页。

这个也可以,效率不一定高。
count = (int)Math.Ceiling(N/M);

------解决方案--------------------
探讨
其实这是一个关乎于小学数学的知识,跟控件神马的无关,不知道大家有没有见过这个运算
Pagecount=(N-1)/M+1

------解决方案--------------------
好高深的问题
------解决方案--------------------
如下验证:
当 只有一条数据是。N=1
每页显示 1条数时:
结果:只有一页

Pagecount=(N-1)/M+1; //结果是 0 错误
Pagecount= (N%M==0)?(N/M):(N/M + 1) //结果是 1 正确

Pagecount=(N+M-1)/M; //这条才是最好解!
//正确。大家用我这个吧


------解决方案--------------------
要想更好的就要用汇编的位运算了
------解决方案--------------------
呵呵,分页控件没有用过。很想用,有空的时候研究一下吧
------解决方案--------------------
我一直用的都是三元去判断呢。
------解决方案--------------------
晕,看错子。 Pagecount=(N-1)/(M+1);
原来,下面这个是正确的。
Pagecount=(N-1)/M+1;