level 1
MadBunny
楼主
估计大家都做过这么一道题,就是求从大小为m×n的矩形网格左下角到右上角一共有几种走法。m、n为格子的数量,不是经纬线的数量。问题是用计算机解这个问题时需要计算m+n与n的组合数(或者m,两者相等),如果直接用M+N的阶乘除以m的阶乘与n的阶乘的积来得到商,那么由于m+n的阶乘增长速度飞快,很小的数,比如m+n=10就会导致用32位整数保存这个结果时发生溢出。所以我想到的办法是不计算m、n中较大的数的阶乘,直接消去。(假设m是较大的数)然后从m+1开始计算,(m+1)/1,(m+2)/2,(m+3)/3……(m+n)/n;然后把这些商乘起来,作为结果。
这里就有一个问题:如何证明这么做的过程中每一个商都是整数?(因为计算机在规定了结果类型是整数之后就不会保存结果的小数部分,必须保证每个商都是整数。)如果不是每个商都是整数,怎么求这个结果才是正确的?
2010年05月04日 11点05分
1
这里就有一个问题:如何证明这么做的过程中每一个商都是整数?(因为计算机在规定了结果类型是整数之后就不会保存结果的小数部分,必须保证每个商都是整数。)如果不是每个商都是整数,怎么求这个结果才是正确的?