因子的阶乘因子

时间:2014-02-22 19:00:57

标签: algorithm math factorial

如何有效地计算数的阶乘的阶乘 示例:对于3 => (3!)! =(6)! = 720
蛮力的方式是使用简单的for循环简单地调用阶乘两次,但可以做得更好。

for(i=1;i<=n;i++) 
   fact=fact*i; 

编辑:需要结果为((n!)!)MOD 10 ^ m,其中m是整数,0 <= m <= 19

6 个答案:

答案 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.对于标准整数类型

  • 我同意MBo
  • 我更喜欢预先计算的值表

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;
}

}