[完全平方数]7744问题

题目要求

输出所有形如aabb的完全平方数(一行一个),即前两位数字相等,后两位数字相等。

解题分析

可以用循环的方式去枚举a,b的所有可能值,然后判断aabb是不是一个完全平方数,如果是就输出。那如何去判断aabb是否为完全平方数呢?可以利用sqrt函数对aabb开方,然后采用floor函数对开方得到的浮点数结果进行四舍五入操作得到一个整数,在判断这个整数的平方是否为aabb,如果是就说明aabb是一个完全平方数。

当然,也可以去枚举开方后的数,从30开始枚举(因为30*30=900,已经很接近四位数了)。然后判断这个数字的前两位是否相等以及后两位是否相等,这个方法是保证了我们要判断的这个是本身是一个完全平方数,只需判断形式上是否符合即可。

代码实现
#include 
#include 
using namespace std;
int main(){
	for(int a=1;a<=9;a++)
		for(int b=0;b<=9;b++){
			int aabb=a*1100+b*11;
			double m=sqrt(aabb);
			//floor(x) 返回不大于x的最大整数 因为浮点数的运算存在误差
			int x=floor(m+0.5);
			if(x*x==aabb) printf("%d\n",aabb);
		}
	return 0;
}
#include 
#include 
using namespace std;
int main(){
	for(int x=30;;x++){
		int aabb=x*x;
		if(aabb<1000) continue;
		if(aabb>9999) break;
		if(aabb/1000==(aabb/100)%10 && aabb%10==(aabb/10)%10){
			printf("%d\n",aabb);
		}
	}
	return 0;
}

你可能感兴趣的:(算法,数据结构)