输出所有形如aabb的完全平方数(一行一个),即前两位数字相等,后两位数字相等。
可以用循环的方式去枚举a,b的所有可能值,然后判断aabb是不是一个完全平方数,如果是就输出。那如何去判断aabb是否为完全平方数呢?可以利用sqrt函数对aabb开方,然后采用floor函数对开方得到的浮点数结果进行四舍五入操作得到一个整数,在判断这个整数的平方是否为aabb,如果是就说明aabb是一个完全平方数。
当然,也可以去枚举开方后的数,从30开始枚举(因为30*30=900,已经很接近四位数了)。然后判断这个数字的前两位是否相等以及后两位是否相等,这个方法是保证了我们要判断的这个是本身是一个完全平方数,只需判断形式上是否符合即可。
#include <iostream>
#include <cmath>
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 <iostream>
#include <cmath>
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;
}