如何有效地计算数的阶乘的阶乘
示例:对于3 => (3!)! =(6)! = 720
蛮力的方式是使用简单的for循环简单地调用阶乘两次,但可以做得更好。
for(i=1;i<=n;i++)
fact=fact*i;
编辑:需要结果为((n!)!)MOD 10 ^ m,其中m是整数,0 <= m <= 19
答案 0 :(得分:7)
注意,对于n> = 5,结果为 0 (5 !! = 120!末尾有超过19个零),结果为较小的值,很容易计算。< / p>
答案 1 :(得分:2)
从ab mod n ≣ (a mod n)(b mod n)
开始,你可以使用强力算法,在每次乘法后除以10 m 。如果产品等于0,则可以停止。
答案 2 :(得分:0)
这里我使用PHP.I认为它可以帮助你
<?php
function double_factorial ($n)
{
if($n <= 1)
{
return 1;
}
else
{
$fat1=$n * factorial($n - 1);
return $fat1 * factorial($fat1 - 1);
}
}
echo double_factorial(3);
?>
答案 3 :(得分:0)
1.对于标准整数类型
2.对于bigints
答案 4 :(得分:0)
以下代码已经过测试并且运行良好。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication50
{
class Program
{
static void Main(string[] args)
{
NumberManipulator manipulator = new NumberManipulator();
Console.WriteLine("Factorial of six is :" + manipulator.factorial(16));
Console.ReadLine();
}
}
class NumberManipulator
{
public int factorial(int num)
{
int result=1;
int b = 1;
do
{
result = result * b;//fact has the value 1 as constant and fact into b will be save in fact to multiply again.
Console.WriteLine(result);
b++;
} while (num >= b);
return result;
}
}
}
答案 5 :(得分:-1)
public class Factorial {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
int result = Factorial(input);
System.out.println(result);
scanner.close();
}
private static int Factorial(int input) {
int m = 1;
if (input < 0) {
return 0;
} else if (input > 0) {
m = input * Factorial(input - 1);
}
return m;
}
}