追記
真面目に解いてみました。 Problem20を先にして使えるなってことで
そのまま流用しただけなんですがね。
#!/usr/bin/perl use strict; use warnings; print "Answer is ", p16(1000), "\n"; # Answer is 1366 sub p16 { my ($times) = @_; my @array1 = (2); for my $i (2..$times) { my @array2 = (2); @array1 = multi_operation(\@array1, \@array2); } my $answer = 0; map {$answer += $_;} @array1; return $answer; } sub multi_operation { my ($array_ref1, $array_ref2) = @_; my @answer; my $length1 = (scalar @{$array_ref1}) - 1; my $length2 = (scalar @{$array_ref2}) - 1; for my $j (0..$length1) { for my $i (0..$length2) { my $mul = $array_ref1->[$j] * $array_ref2->[$i]; my $div = 0; my $mod = $mul; if ($mul >= 10) { $div = int($mul / 10); $mod = $mul % 10; $answer[$i + $j + 1] += $div; } $answer[$i + $j] += $mod; if ($answer[$i + $j] >= 10) { $answer[$i + $j + 1] += int($answer[$i + $j] / 10); $answer[$i + $j] = $answer[$i + $j] % 10; } } } return @answer; }