ABCDEF * 4 = FABCDE
6桁の整数で、
「4倍すると末尾の数字が先頭にくる」
というものをみつけてほしい。たとえば
のような数である(もちろんこの例はデタラメだが)。
こんなことやっているから暇人だと思われるんだよな。
さすがに考えたのは研究室から帰ってきたあとだからね!誤解しないでね!研究室では真面目に研究したり仕事したりしてるからね!
で、
「これはプログラミングの練習にちょうど良い!」
と思って、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倍して足して掛け算の結果の整数を作る。これはキレイなものを思いついたと思った。
で、判定にかけて正しかったら出力、と。
もっと良いアルゴリズム思いついたら教えて下さい。
気になる結果はこちら。
これは3つも見つかったというべきか、3つしか無いというべきか。