/ / Perl y Big Number - Perl, Bigint

Perl y Big Number - Perl, Bigint

Para calcular nCr [es decir, n! / (r! * (n-r)!)], escriba el siguiente código.

Código Perl:

($i,$j)=(1000,100);
print fact($i)/(fact($j)*(fact($i-$j)));
sub fact{
return 1 if $_[0]<=1;
return $_[0]*fact($_[0]-1);
}

que está dando salida como "-Yaya" pero,

El mismo código lógico en Python da el resultado correcto.

Código Python:

def fact(x):
if x <= 1:
return 1
return x*f(x-1)
v,y = 1000,100
print fact(v)/(fact(y)*fact(v-y))

Amablemente, hágame saber qué cambios debo hacer en el código Perl para que funcione para números más grandes (y también traté de usar bigint también, pero no funcionó)

Editar:

Gracias a todos por la respuesta.

Lo siento, me he perdido; y 1.

Creo que Bigint depende de la configuración de la máquina.

http://www.perlmonks.org/?node_id=906757

Respuestas

0 para la respuesta № 1

No sé lo que hiciste, pero use bigint funciona bien

Como dijo ikegami, el código que publicaste ni siquiera se compila, así que lo estás haciendo lo más difícil posible para ayudarte.

use strict;
use warnings;

use bigint;

my ($i, $j) = (1000, 100);

no warnings "recursion";

print fact($i) / ( fact($j) * fact($i-$j) ), "n";

sub fact{
$_[0] <= 1 ? 1 : $_[0] * fact($_[0]-1);
}

salida

63850511926305130236698511142022274281262900693853331776286816221524376994750901948920974351797699894319420811933446197797592213357065053890

¿Por qué querrías ese número, de todos modos?


0 para la respuesta № 2

prueba esto creo que resolverá el problema

use bignum;
($i,$j)=(1000,100);
print fact($i)/(fact($j)*(fact($i-$j)));
sub fact{
return 1 if $_[0]<=1;
return $_[0]*fact($_[0]-1);
}