【ProjectEuler】ProjectEuler_017

1830 ワード

using System;
using System.Collections.Generic;
using System.Text;

namespace projecteuler017
{
    class Program
    {
        /// <summary>
        /// 1~19 
        /// </summary>
        static int[] d1_19 = new int[] { 0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8 };
        
        /// <summary>
        /// 20,30,40……90 
        /// </summary>
        static int[] d20_90 = new int[] { 0, 0, 6, 6, 5, 5, 5, 7, 6, 6 };

        static void Main(string[] args)
        {
            F1();
        }

        private static void F1()
        {
            Console.WriteLine(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod());
            DateTime timeStart = DateTime.Now;

            int sum = 0;
            for (int i = 1; i <=1000; i++)
            {
                sum += getLetterCount(i);
            }
            Console.WriteLine(sum);

            Console.WriteLine("Total Milliseconds is " + DateTime.Now.Subtract(timeStart).TotalMilliseconds + "

"); } private static int getLetterCount(int n) { if (n < 20) { return d1_19[n]; } if (n % 10 == 0 && n <= 90) { return d20_90[n / 10]; } if (n <= 99) { return d20_90[n / 10] + d1_19[n % 10]; } if (n == 1000) { return 11; //one thousand } if (n % 100 == 0) { return d1_19[n / 100] + 7; } return getLetterCount(n / 100 * 100) + 3 + getLetterCount(n % 100); } } } /* Void F1() 21124 Total Milliseconds is 11.5015 By GodMoon */