我遇到了计算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
原文地址:https://www.jb51.cc/Perl/171974.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。