题解 | 自守数
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
int num;
cin >>num;
int cnt = 0;
for(int i=0 ; i<=num ; i++){
string str = to_string(i);
int len =str.length();
int yushu = (i*i) % (int)pow(10,len);
if(yushu == i){
cnt++;
}
}
cout << cnt << endl;
}
思路是比较这个数平方之后的尾数是不是跟本身相等,求尾数的方式是对10的幂次取余,幂次取决于这个数本身的长度,比如25,长度是2,所以它的平方应该对10^2取余,以此类推
