Problem 32
- 1 桁 x 4 桁、もしくは 2 桁 x 3 桁のいずれか。
- 1 桁 x 3 桁はありえない。
9 * 999 = 8991
なので、最大でも 8 桁にしかならないから。
- 3 桁 x 3 桁はありえない。
100 * 100 = 10000
なので、9 桁を超えてしまうから。
using System;
using System.Collections.Generic;
using System.Linq;
class PE032 {
static bool IsPandigital(int a, int b) {
var s = a.ToString() + b.ToString() + (a*b).ToString();
if (s.Length != 9) return false;
int[] freq = new int[10];
foreach (char c in s) {
if (c == '0') return false;
if (++freq[c - '0'] > 1) return false;
}
Console.WriteLine("{0} * {1} = {2}", a, b, a * b);
return true;
}
static void Main() {
var st = new HashSet<int>();
for (int i = 1; i < 10; i++) {
for (int j = 1000; j < 10000; j++) {
if (IsPandigital(i, j))
st.Add(i * j);
}
}
for (int i = 10; i < 100; i++) {
for (int j = 100; j < 1000; j++) {
if (IsPandigital(i, j))
st.Add(i * j);
}
}
Console.WriteLine(st.Sum());
}
}
int
が ToString
メソッドを呼び出せるのが、とても新鮮にみえる。