我有一个方法返回输入的阶乘.它适用于整数,但我无法弄清楚如何使它与十进制数一起工作.
这是我目前的方法:
public static double factorial(double d)
{
if (d == 0.0)
{
return 1.0;
}
double abs = Math.abs(d);
double decimal = abs - Math.floor(abs);
double result = 1.0;
for (double i = Math.floor(abs); i > decimal; --i)
{
result *= (i + decimal);
}
if (d < 0.0)
{
result = -result;
}
return result;
}
我找到了一个实现,但代码没有显示(我丢失了链接),给出的例子是5.5! = 5.5 * 4.5 * 3.5 * 2.5 * 1.5 * 0.5! = 287.885278
所以从这种模式,我只是在for循环结果中将十进制值添加到i *(i decimal)
但显然我的逻辑存在缺陷
编辑:刚刚意识到最后一个值是0.5!而不是0.5.这一切都有所不同.所以0.5! = 0.88622和5.5! = 5.5 * 4.5 * 3.5 * 2.5 * 1.5 * 0.88622等于287.883028125