要找出自守数,必须找到它的特点:
- 自首数的 最后一位 除0外必须为 1、5、6;
- 如果最后一位为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; }