題目傳送門
同構數是這樣一種數:它出現在它的平方數的右端。
我們可以寫一個計算位數的函數
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;
}