ABCDEF * 4 = FABCDE

6桁の整数で、
「4倍すると末尾の数字が先頭にくる」
というものをみつけてほしい。たとえば
123456 \times 4 = 612345
のような数である(もちろんこの例はデタラメだが)。

こんなことやっているから暇人だと思われるんだよな。
さすがに考えたのは研究室から帰ってきたあとだからね!誤解しないでね!研究室では真面目に研究したり仕事したりしてるからね!


で、
「これはプログラミングの練習にちょうど良い!」
と思って、Cでささっとコードを書いてみた。

#include <stdio.h>

int main(void)
{
  int i;
  int j;
  int k;
  int l;

  for (i=100002;i<250000;i+=2)
    {
      if (i%10)
	{
	  k = i / 10;
	  l = i % 10;
	  j = k + l * 100000;

	  if (i*4 == j)
	    {
	      printf("%d * 4 = %d\n", i, j);
	    }
	}
    }
  return 0;
}

まーこんな感じ。
調べる範囲は100000から250000まで。これは題意を考えるに妥当な設定だろう。
で、まずはiを10で割った余りを見る。余りが0なら一の位が0ということなので、そもそも判定ループに入れない(これが高速化にどれくらい利くか分からないが……)。
次に、iを10で割った商に、iを10で割った余りを100000倍して足して掛け算の結果の整数を作る。これはキレイなものを思いついたと思った。
で、判定にかけて正しかったら出力、と。


もっと良いアルゴリズム思いついたら教えて下さい。


気になる結果はこちら。
102564\times 4 = 410256
153846\times 4 = 615384
205128\times 4 = 820512
これは3つも見つかったというべきか、3つしか無いというべきか。