加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 用所有数字计算100阶乘

发布时间:2020-12-15 21:53:53 所属栏目:大数据 来源:网络整理
导读:我遇到了计算100阶乘的问题. 这是我在Perl中首先尝试计算100! : #!/usr/bin/perluse strict;use warnings;use Math::BigInt;my $n=;chomp($n);print fac($n);sub fac{ my ($m) = @_; return 1 if($m =1 ); return $m*fac($m-1);} 但这给了我9.332621544394
我遇到了计算100阶乘的问题.

这是我在Perl中首先尝试计算100! :

#!/usr/bin/perl

use strict;
use warnings;
use Math::BigInt;

my $n=<>;
chomp($n);
print fac($n);

sub fac
{
    my ($m) = @_;

    return 1 if($m <=1 );
    return $m*fac($m-1);
}

但这给了我9.33262154439441e 157.

我需要所有数字的答案.

我该怎么办?

解决方法

双打(大多数Perls使用)只有~16位精度.您需要使用另一个系统来获得所需的158位精度.
use bigint;

这将导致Perl自动将脚本中的所有数字视为Math :: BigInt对象.

如果你需要更好的控制(将一些数字视为BigInt,将某些数字视为浮点数),请参阅Krishnachandra Sharma的解决方案并明确使用Math :: BigInt构造函数.

Math :: BigInt有一个内置的阶乘函数,顺便说一下:

$perl -MMath::BigInt -e 'print Math::BigInt->bfac(100)'
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读