トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Problem36 10進でも2進でも回文数になる数の総和
問題
585 = 10010010012 (2進) は10進でも2進でも回文数である.
100万未満で10進でも2進でも回文数になる数の総和を求めよ.
(注: 先頭に0を含めて回文にすることは許されない.)
ソース
using System;
using System.Linq;
class Program
{
static bool IsKaibun(string pTarget)
{
var sb = new System.Text.StringBuilder();
foreach (Char EachChar in pTarget.ToCharArray().Reverse())
sb.Append(EachChar);
return pTarget == sb.ToString();
}
static void Main()
{
var Query = Enumerable.Range(1, 999999)
.Where(X => X % 2 == 1) //偶数は、2進数で1桁目が0なので、チェック対象外
.Where(X => IsKaibun(X.ToString()))
.Where(X => IsKaibun(Convert.ToString(X, 2)));
int Cnt = 0, SumVal = 0;
foreach (int EachInt in Query)
Console.WriteLine("{0,3}番目は{1,7}。合計は{2,7}", ++Cnt, EachInt, SumVal += EachInt);
}
}
実行結果
1番目は 1。合計は 1
2番目は 3。合計は 4
3番目は 5。合計は 9
4番目は 7。合計は 16
5番目は 9。合計は 25
6番目は 33。合計は 58
7番目は 99。合計は 157
8番目は 313。合計は 470
9番目は 585。合計は 1055
10番目は 717。合計は 1772
11番目は 7447。合計は 9219
12番目は 9009。合計は 18228
13番目は 15351。合計は 33579
14番目は 32223。合計は 65802
15番目は 39993。合計は 105795
16番目は 53235。合計は 159030
17番目は 53835。合計は 212865
18番目は 73737。合計は 286602
19番目は 585585。合計は 872187
解説
IsKaibunという匿名でないメソッドを用意して、Where拡張メソッドで使うと便利ですね。