1,python3中整除用//,而非整除用/。
我最近遇到一个坑,待我慢慢道来,我用math模块的factorial去定义组合数,代码如下:
def calc_combination(n, m):
'''计算组合数'''
return(factorial(n) / (factorial(m) * factorial(n - m)))
非常稀疏平常的一件事,然而这样计算出来的结果总达不到牛客网的要求,,,
来了个例子看了下:
calc_combination(92 ,18)的计算结果为5.873182941643167e+18
咋一看没发现问题,三思之后,发现这是用科学计数法表示的,计算机中的浮点数和整数的表示是有很大学问的(IEEE Standard 754 浮点数)。
。。。
来个更直观的例子:
factorial(40) / factorial(15)结果为
5.873182941643167e+18
而factorial(40) // factorial(15)结果为
623943776229081622823099695104000000
很显然前面是没有后面精确的。。。这也太坑了,我还是太年轻了。
所以,要这么定义组合数:
def calc_combination(n, m):
'''计算组合数'''
return(factorial(n) // (factorial(m) * factorial(n - m)))