Q01 10進数で回文



プログラマ脳を鍛える数学パズル
シンプルで高速なコードが書けるようになる70問より

2桁以上で、最初の10進数、8進数、2進数で回文になる数字
using System;

namespace SampleCode
{
    class Program
    {
        static void Main(string[] args)
        {
            var (num10, num8, num2) = (9, "", "");
            while(true)
            {
                num10++;
                num8 = Convert.ToString(num10, 8);
                num2 = Convert.ToString(num10, 2);

                // 10進数 & 8進数 & 2進数
                if (!IsKaibun(num10.ToString()) | !IsKaibun(num8) | !IsKaibun(num2))
                {
                    continue;
                }

                break;
            }

            Console.WriteLine("10進数:{0}", num10);
            Console.WriteLine("8進数:{0}", num8);
            Console.WriteLine("2進数:{0}", num2);
        }

        static bool IsKaibun(string str)
        {
            for(var i = 0; i < str.Length / 2; i++)
            {
                if(str[i] != str[str.Length - 1 - i])
                {
                    return false;
                }
            }

            return true;
        }
    }
}


答え見て確かに・・・と思ったのが
2進数で偶数は末尾0になり、一番大きい桁は常に1になるので
偶数の時は、回文にならないため奇数の時だけチェックすればよいとのこと。

using System;

namespace SampleCode
{
    class Program
    {
        static void Main(string[] args)
        {
            var (num10, num8, num2) = (9, "", "");
            while(true)
            {
                num10 += 2;
                num8 = Convert.ToString(num10, 8);
                num2 = Convert.ToString(num10, 2);

                // 10進数 & 8進数 & 2進数
                if (!IsKaibun(num10.ToString()) | !IsKaibun(num8) | !IsKaibun(num2))
                {
                    continue;
                }

                break;
            }

            Console.WriteLine("10進数:{0}", num10);
            Console.WriteLine("8進数:{0}", num8);
            Console.WriteLine("2進数:{0}", num2);
        }

        static bool IsKaibun(string str)
        {
            for(var i = 0; i < str.Length / 2; i++)
            {
                if(str[i] != str[str.Length - 1 - i])
                {
                    return false;
                }
            }

            return true;
        }
    }
}

投稿日時: 2020-07-04 11:45:04
更新日時: 2020-07-04 12:51:04
macのデフォルトのshell | 選択ソート

Comment