用于计算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依赖于机器配置
答案 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);
}