×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

二乗して回文となる非回文数

乗すると回文数となる数を求めるプログラムです。この時、二乗する前の数が回文である数を除きます。
回文数とは、21512 のように、逆から読んでも同じ数になる数字のことです。

処理速度は無視し、素直なコードとしました。
SquareIsPalindromeクラスがその解を求めるクラスで、Solveメソッドは、IEnumerabl<long>を
返すメソッドとしています。
この戻り値を Selectメソッドを使い表示用に加工し、ItemsSourceに代入することで、
ListBoxに表示させています。

このプログラムでは、100000未満の値を対象にしました。
これよりも大きな値を対象にすると、もっと速度を上げる必要があります。
処理速度を上げようとすると、根本的にアルゴリズムを考え直す必要がありそうですが、
その答えを持ち合わせていません。
たぶん数学的な考察が必要となると思いますが、はたしてどこまで速くすることができるのか?
興味のある方はチャレンジしてください。

以下、C#+Silverlightのコードです。


■SquareIsPalindrome .cs


■MainPage.xaml.cs


■MainPage.xaml