Project Euler : Problem 36 『Double-base palindromes』

まさかさかさま動物回文集


問題

projecteuler.net
日本語訳→Problem 36 - PukiWiki


回文を作って検査する方が速いかな?

 「どっちの進数でも先頭が0はダメ」とあるので、
奇数の回文を調べればいいということが分かる。


 めんどくさかったので100万までの全部の奇数をチェックする感じで書いたけど、
10進数か2進数の回文を作ってから検査した方が速かったと思う。


コード
using System;
using System.Diagnostics;

namespace Problem36
{
    class Program
    {
        static void Main(string[] args)
        {
            P36 p = new P36();
            Debug.WriteLine(p.Solve());
        }
    }

    class P36
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public P36()
        {

        }

        /// <summary>
        /// 解く
        /// </summary>
        public int Solve()
        {
            int sum = 0;

            for (int i = 1; i < 1000000; i+=2)
            {
                if(this.IsDecimalPalindrome(i) == true)
                {
                    if(this.IsBinaryPalindrome(i) == true)
                    {
                        sum += i;
                    }
                }
            }

            return sum;
        }

        /// <summary>
        /// 10進数の回文か?
        /// </summary>
        /// <param name="n">検査する値</param>
        private bool IsDecimalPalindrome(int n)
        {
            string s = n.ToString();

            for (int i = 0; i < s.Length / 2; i++)
            {
                if (s[i] != s[s.Length - 1 - i]) return false;
            }

            return true;
        }


        /// <summary>
        /// 2進数の回文か?
        /// </summary>
        /// <param name="n">検査する値</param>
        private bool IsBinaryPalindrome(int n)
        {
            string s = Convert.ToString(n, 2);

            for (int i = 0; i < s.Length/2; i++)
            {
                if (s[i] != s[s.Length - 1 - i]) return false;
            }

            return true;
        }
    }
}
答え

872187



まさかさかさま動物回文集

まさかさかさま動物回文集

たのしい回文:くるくる回るアタマをつくろう

たのしい回文:くるくる回るアタマをつくろう

頭が良くなる言葉遊び―回文句集

頭が良くなる言葉遊び―回文句集