Problem 36
(* 585 = 10010010012 (2進) は10進でも2進でも回文数である. 100万未満で10進でも2進でも回文数になるような数の総和を求めよ. (注: 先頭に0を含めて回文にすることは許されない.) *) (* 872187 -- 0 1 3 5 7 9 33 99 313 585 717 7447 9009 15351 32223 39993 53235 53835 73737 585585 *) let calc() = let tchk (a,b) = a = b let fa (n:int) = System.Convert.ToString(n,2).ToCharArray() let chkrev arr = Array.zip arr (Array.rev arr) |> Array.forall (tchk) let chk n = (chkrev (n.ToString().ToCharArray())) && (chkrev (fa n)) Seq.initInfinite ((+)0) |> Seq.takeWhile ((>)1000000) |> Seq.filter (chk) |> Seq.sum
-
- -