題目傳送門
 同構數是這樣一種數:它出現在它的平方數的右端。
 我們可以寫一個計算位數的函數
while(a!=0){ wsop++;//位數++ a/=10;//不加會RE }
再寫一個一個判斷同構數的函數,使用ans求出后面wsp(a)位的數。
int tgs(long long a){
	int ans=1;//初始化 
	for(int i=1;i<=wsp(a);i++){ 
		ans*=10;//求10^wsp(a) 
	}
	if((a*a)%ans==a){//判斷是否是同構數 
		return 1;
	}
	return 0;
}
 
        代碼:
#include<iostream>
using namespace std;
int wsp(long long a){
	int wsop=0;
	while(a!=0){
		wsop++;//位數++ 
		a/=10;//不加會RE 
	}
	return wsop;
}
int tgs(long long a){
	int ans=1;//初始化 
	for(int i=1;i<=wsp(a);i++){ 
		ans*=10;//求10^wsp(a) 
	}
	if((a*a)%ans==a){//判斷是否是同構數 
		return 1;
	}
	return 0;
}
int main(){
	int n,sum=0;//初始化 
	cin>>n;
	for(int i=1;i<=n;i++){
		sum+=tgs(i);//求個數 
	}
	cout<<sum;//輸出 
	return 0;
} 
 
         
         
       