gpt4 book ai didi

c - 如何计算这个阶乘

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:38 24 4
gpt4 key购买 nike

#include <stdio.h>
int main(){
int n, v;
printf("Please enter a value from 39 to 59: \n");
scanf("%d", &n);
printf("Please enter a value from 3 to 7: \n");
scanf("%d", &v);

}

当我从用户那里获得这些值时,我该如何执行阶乘计算:

n! / ((n-v)! * v!))

我尝试了不同的数据类型,但显然没有一种能保存结果。

例如:n = 49,v = 6。结果是:13,983,816,但我怎样才能得到它呢?

最佳答案

最好的办法是放弃通常基于递归的朴素阶乘实现,并切换到返回 Gamma 函数自然对数的实现。

gamma 函数与阶乘有关:gamma(n) = (n-1)!

最好的是 natural log of gamma ,因为您可以像这样重写该表达式:

ln(n!/(n-v)!v!) = ln(n!) - ln((n-v)!) - ln(v!)

但是

(n-v)! = gamma(n-v+1)
n! = gamma(n+1)
v! = gamma(v+1)

所以

ln(n!/(n-v)!v!) = lngamma(n+1) - lngamma(n-v+1) - lngamma(v+1)

您可以在 Numerical Recipes 中找到 lngamma 的实现。

lngamma 返回 double 值,因此它甚至适合更大的值。

不言而喻,您将对双方都使用 exp() 以获得您想要的原始表达式。

关于c - 如何计算这个阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com