def c1 (n,i):
minNI = min(i,n-1)
result = 1
for j in range (0,minNI):
result = result * (n-j)/(minNI-j)
return result
print ('更改前C(5,3)数值为:',c1(5,3))
print ('更改前C(100,97)数值为:',c1(100,97))
print ('更改前C(100,3)数值为:',c1(100,3))
#例如更改为//后C(5,2)的结果便不等于10
def c2 (n,i):
minNI = min(i,n-1)
result = 1
for j in range (0,minNI):
result = result * (n-j)//(minNI-j)#//取的是最小整数,/得到的是实际结果,然而如改为//会产生更大的误差,
return result
print ('更改//后C(5,3)数值为:',c1(5,3))
print ('更改//后(100,97)数值为:',c2(100,97))
print ('更改//后(100,3)数值为:',c2(100,3))
#根据数学组合公式应写为如下方式:
def jc(a):
a1 = a
for b in range(1, a):
a1 = a1 * (a - b)
return a1
def cni(n,i):
if(n<i):
print("输入错误!n应大于i")
return 0
else:
result = jc(n)//(jc(i)*jc(n-i))#此时利用//仅取整一次,可以降低很多误差
return result
print ('更改算法和//后C(5,3)数值为:',cni(5,3))
print ('更改算法和//后C(100,97)数值为:',cni(100,97))
print ('更改前算法和//C(100,3)数值为:',cni(100,3))