#include <stdio.h>
#include <stdio.h>
int isom(int n) {
int sum = 0;
for (int i = 0; i <= n; i++) {
int sq = i * i; // 二乗
int mod = 1;
int x = i;
// iの桁数に応じた10の累乗を作る
if (i == 0) mod = 10;
else {
while (x > 0) {
mod *= 10;
x /= 10;
}
}
// 二乗の末尾が同じなら自己同形数
if (sq % mod == i) {
sum += i;
}
}
return sum;
}
int main(void) {
printf("%d\n", isom
(10)); // → 12 printf("%d\n", isom
(99)); // → 113 return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKaW50IGlzb20oaW50IG4pIHsKICAgIGludCBzdW0gPSAwOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG47IGkrKykgewogICAgICAgIGludCBzcSA9IGkgKiBpOyAgICAgLy8g5LqM5LmXCiAgICAgICAgaW50IG1vZCA9IDE7CiAgICAgICAgaW50IHggPSBpOwoKICAgICAgICAvLyBp44Gu5qGB5pWw44Gr5b+c44GY44GfMTDjga7ntK/kuZfjgpLkvZzjgosKICAgICAgICBpZiAoaSA9PSAwKSBtb2QgPSAxMDsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKHggPiAwKSB7CiAgICAgICAgICAgICAgICBtb2QgKj0gMTA7CiAgICAgICAgICAgICAgICB4IC89IDEwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyDkuozkuZfjga7mnKvlsL7jgYzlkIzjgZjjgarjgonoh6rlt7HlkIzlvaLmlbAKICAgICAgICBpZiAoc3EgJSBtb2QgPT0gaSkgewogICAgICAgICAgICBzdW0gKz0gaTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHN1bTsKfQppbnQgbWFpbih2b2lkKSB7CiAgICBwcmludGYoIiVkXG4iLCBpc29tKDEwKSk7ICAvLyDihpIgMTIKICAgIHByaW50ZigiJWRcbiIsIGlzb20oOTkpKTsgIC8vIOKGkiAxMTMKICAgIHJldHVybiAwOwp9CgoK