suxxsfe

一言(ヒトコト)

东方博宜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;
} 
posted @ 2021-07-27 20:06  卫道士qwq  阅读(1259)  评论(0)    收藏  举报