私はランタイムをテストしたいので、4 ^(0)〜4 ^(10)の階乗を計算するスクリプトを書いています。また、Stirlingの近似値と実際の桁数それぞれの階乗のPerlで次の行の印刷方法は?
Factorial 1: 1 digits.
Factorial 4: 2 digits.
Factorial 16: 14 digits.
Factorial 64: 90 digits
次のように私は階乗の出力を希望
The factorial of 1 is
1
The factorial of 4 is
24
The factorial of 16 is
20922789888000
The factorial of 64 is
126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
:
は、だから私は、例えば、以下のデータが含まれてい factorials.txtと呼ばれるこのデータを使用してファイルを持っています
私はこれらの値を取得するためのスクリプトを書くことができました。___の階乗についての私のステートメントの後には、次の行で階乗の値が入ります。しかし、私は試合後の次の行を選択することができませんでした。だから、私はこれを、文字の存在しないファイルの照合のwhileループを使用して書き、行の文字の長さを表示しました。それは機能しますが、私はそれが非常に効率的だとは思いません。
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
my $file = 'factorials.txt';
my $filehandle;
open($filehandle, '<', $file) or die "Could not open file $_ because $!";
while(my $line = <$filehandle>)
{
chomp $line;
my $index = $.;
if($line !~ m/[a-z]/)
{
say length($line);
}
}
私のスクリプトは、例えば、次のように出力します。それはライン上に「階乗」の単語と一致した場合、次の行に文字の長さを印刷する
1
2
14
90
私は構文解析スクリプトをしたいです。私はこれが可能でなければならないと信じていますが、次の行へ行く方法を理解できないようです。
アイデア?本当にありがとう!
あなたは 'のための$ index'を何が必要ですか? – simbabque
私は特殊な変数 "$"である$インデックスが有用かもしれないと思いました。行番号が入っています。だからもし私が($ index == 2){$ line;}と書くと、改行で2行目が表示されます。しかし、一致する行に応じてインデックスをインクリメントする方法はわかりません。 – xyz123
私はそれを得るのか分かりません - 最初に表示されたファイルを処理したいので、 'factorial of N is'行に桁数を追加しますが、結果には次の行を入れますか? – zdim