#!/usr/bin/perl

# 使用遞迴方法 (recursive)
# 輸入 : 正整數 n
# 輸出 : 階乘 n!
sub factorial {
    my $n = shift;

    return 'NaN' if ($n1) {
        $fact *= $n;
        $n = $n - 1;
    }
    return $fact;
}

上面程式以自家電腦執行發現
18! 之後以科學記號顯示
171! 之後溢位無法計算



# 使用遞迴方法 (recursive)
# 輸入 : 正整數 n
# 輸出 : 雙階乘 n!!
sub double_factorial {
    my $n = shift;

    return 'NaN' if ($n1) {
        $fact *= $n;
        $n = $n - 2;
    }
    return $fact;
}

上面程式以自家電腦執行發現
28!! 之後以科學記號顯示
301!! 之後溢位無法計算



# 使用大數模組 (package)
# 輸入 : 正整數 n
# 輸出 : 階乘 n!
use Math::BigInt;
sub factorial_p {
    my $n = shift;

    $fact = Math::BigInt->new($n);
    return $fact->bfac();
}

# 使用大數模組 (package)
# 輸入 : 正整數 n
# 輸出 : 雙階乘 n!!
sub double_factorial_p {
    my $n = shift;
    my $fact = Math::BigInt->new(1);

    return 'NaN' if ($n1) {
        $fact = $fact->bmul($n);
        $n = $n - 2;
    }
    return $fact;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 搗蛋鬼 的頭像
    搗蛋鬼

    別搗蛋

    搗蛋鬼 發表在 痞客邦 留言(0) 人氣()