/ / Perl e Big Number - perl, bigint

Perl e Big Number - perl, bigint

Para calcular nCr [isto é, n! / (r! * (n-r)!)], escreveu o código abaixo.

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 saída como "-NaN" mas,

mesmo código lógico em python fornece o resultado correto.

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))

Por favor, deixe-me saber quais alterações eu tenho que fazer no código perl para fazê-lo funcionar com números maiores. (E também tentei usar "bigint" também, mas não funcionou)

Editar:

Obrigado a todos pela resposta.

Desculpe, eu perdi; e 1.

Eu acho que o bigint depende da configuração da máquina

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

Respostas:

0 para resposta № 1

Eu não sei o que você fez, mas use bigint funciona bem

Como o ikegami disse, o código que você postou nem é compilado, então você está tornando o mais difícil possível para ajudá-lo

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

saída

63850511926305130236698511142022274281262900693853331776286816221524376994750901948920974351797699894319420811933446197797592213357065053890

Por que você iria querer esse número, afinal?


0 para resposta № 2

tente isso eu acho que vai resolver o 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);
}