真面目に解いてみました。 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;
}