Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo calcular "factorial"

Cómo calcular "factorial"

Para ser honesto, no existe una fórmula ni un método simple para calcular el factorial. Puedes calcularlo a mano o usar una computadora. ¡La computadora puede calcular hasta 65! Si desea utilizar números más grandes para calcular, le sugiero que vaya a Baidu para buscar un software para calcular factoriales. Escuché que puede calcular números de cualquier tamaño.

También existe esta referencia:

Dado que el factorial crece muy rápido (más rápido que 2^n), para factoriales de números enteros más pequeños, puedes usar el algoritmo recursivo simple, pero para multiplicación de números enteros grandes (¡como 1000!), el algoritmo recursivo tradicional es inútil.

Como mi nivel no es alto, utilizo el siguiente método torpe para lograrlo. Por favor, dame algunos consejos de expertos. Los detalles son los siguientes: Defina una matriz muy larga y utilice cada elemento de la matriz para representar cada bit del resultado del cálculo. Por ejemplo, 7!=5040, a[1000], luego a[0]=0, a[1]=4, a[2]=0, a[3]=5.

Código fuente del programa:

/**

* Calcular el factorial de un número grande La idea principal del algoritmo es calcular un bit. de cada bit en la matriz El resultado calculado expresado: como calcular 5!

*(1) a[0]=1, luego a[0]=a[0]*2, a[0]=2,

*(2) a [0]=a[0]*3, a[0]=6

*(3) a[0]=a[0]*4, a[0]=24, en este momento a [1]=2, a[0]=4

*/

Clase pública Factorial

{

estático int a [ ] = nuevo int [10000];

factorial vacío estático(int n)

{

for(int i=2; i< a.length ; i++)

a[i] = 0; //Inicializar elementos de la matriz

a[0] = 1 //Usar un elemento en la matriz para guardar el número de dígitos. en el resultado del cálculo

a[1] = 1; //Asigna el primer elemento a un elemento

for(int j= 2; j <= n; j++)

{

int i=1;

int c = 0; //c significa redondear a dígitos altos

for(; i < = a[0 ]; i++)

{

a[i] = a[i] * j + c //Agrega el resultado del cálculo de orden inferior al resultado local.

c = a[i] / 10

a[i] = a[i] % 10; for(; c !

{

String num = args[0];

int count = 0;

int n = Integer.parseInt( num);

f(n);

for(int i= a[0]; i>0; i--)

{

count++;

System.out.print(/*"a[" + i + "]=" + */a[i]/* + ""* /);

}

System.out.println("/n "+cuenta); p>

Trackback:/TrackBack.aspx?PostId=528778

Referencia:/hengshan/archive/2005/11/13/528778.aspx