Project Euler 38

Problem 38

  • n > 1 なので 100000 まで調べている。もっと値は小さくできそうだけど……。
using System;

class PE038 {
    static int Calc(int n) {
        string s = "";
        for (int i = 1; ; i++) {
            s += (n * i).ToString();

            int[] freq = new int[10];
            int m = 0;
            for (int j = 0; j < s.Length; j++) {
                int p = s[j] - '0';
                if (p != 0 && 1 == ++freq[p]) {
                    m++;
                }
                else {
                    return -1;
                }
            }

            if (m == 9) {
                Console.WriteLine("{0} {1} {2}", n, i, s);                
                return int.Parse(s);
            }
        }
    }
    
    static void Main() {
        int ans = Enumerable.Range(1, 100000).Select(e => Calc(e)).Max();
        Console.WriteLine(ans);
    }
}