要找出自守数,必须找到它的特点:

  1. 自首数的 最后一位 除0外必须为 1、5、6
  2. 如果最后一位为0,那只有一个数成立,那就是 0本身

基于以上所得到的num,我们只需要验证平方的最后几位是否等于num即可.

#include<iostream>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        int ans=0;
        for(int i=1;i<=n;i++){
            if(i%10==1||i%10==5||i%10==6){ //找到可能成为自守数的数
                int temp1=i, temp2=i*i;
                while(temp1){//验证后几位
                    if(temp2%10!=temp1%10) break;
                    temp1/=10;
                    temp2/=10;
                }
                if(temp1==0) ans++;
            }
        }
        cout<<ans+1<<endl;//带上0
    }
    return 0;
}