読者です 読者をやめる 読者になる 読者になる

Problem 4

euler perl


4問目。3桁の数の掛け算で上から読んでもしたから読んでも同じ数になるもののうち
最大値を選べという問題。それなりに perlらしく解答できたのかな?値を配列で返しても
よかったけど、面倒なので文字列で返した。ちなみに 4桁だと 99000099 = 9999 * 9901
というのが答えのようだけど、解答までにすごい時間がかかりますね。逆から計算して、
早めに答えを返した方がいいのかな。要検討。

#!/usr/bin/perl
use strict;
use warnings;

print p4(3), "\n"; #906609 =  913 * 993

sub p4
{
  my ($digit) = @_;

  my $max = 0;
  my ($num1, $num2);
  my $limit = (10 ** $digit) - 1;

  for my $i (100..$limit) {
    for my $j (100..$limit) {
      my $mul = $i * $j;

      if ($mul eq (reverse $mul)) {
        $num1 = $i; $num2 = $j;
        $max =  $mul if $max < $mul;
      }
    }
  }

  return "$max = $num1 * $num2";
}