输出所有形如aabb的四位完全平方数(即前两位数字相等,后两位数字也相等)。
第一种:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int a,b,n;
double m;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++){
n=a*1100+b*11;
m=sqrt(n);
if(floor(m+0.5)==m)
printf("%d\n",n);
}
}
浮点数的元算有可能存在误差,不是一定存在,但经常都会。
floor(X)返回X的整数部分。
经过大量的运算,由于误差的影响,整数1变成0.99999999,floor的结果会是0而不是1.
我们一般改为四舍五入的,floor(X+0.5)。
第二种:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int x,n,hi,lo;
for(x=1;;x++){
n=x*x;
if(n<1000)continue ;
if(n>9999) break;
hi=n/100;
lo=n%100;
if(hi/10==hi%10 && lo/10==lo%10)
printf("%d\n",n);
}
}
由于浮点数的误差,所以下边的是错误的。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int a,b,n;
double m;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++){
n=a*1100+b*11;
m=sqrt(n);
if(n==m*m)
printf("%d\n",n);
}
}