东⽅博宜OJ1729:【基础】同构数题解
同构数是这样⼀种数:它出现在它的平⽅数的右端。
我们可以写⼀个计算位数的函数
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;
}