东方博宜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;
} 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM