Perl和大数

时间:2015-06-19 02:37:29

标签: perl bigint

用于计算nCr [即n! /(r!*(n-r)!)],写下面的代码。

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

将输出设为&#34; -NaN&#34; ,但

python中的相同逻辑代码给出了正确的结果。

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

请让我知道我在perl代码中做了哪些更改,以使其适用于更大的数字。(而且我也尝试使用&#34; bigint&#34; ,但< strong>没有工作)

修改

谢谢大家的回复。

很抱歉,我错过了;和-1。

我认为bigint依赖于机器配置

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

2 个答案:

答案 0 :(得分:0)

我不知道你做了什么,但use bigint工作正常

正如池上所说,您发布的代码甚至无法编译,因此您可以尽可能地努力帮助您

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

<强>输出

63850511926305130236698511142022274281262900693853331776286816221524376994750901948920974351797699894319420811933446197797592213357065053890

无论如何,你为什么要这个号码?

答案 1 :(得分:0)

尝试这个我认为这将解决问题

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