题目传送门
同构数是这样一种数:它出现在它的平方数的右端。
我们可以写一个计算位数的函数
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;
}