//为了减少误差的影响,一般四舍五入
//7744问题
//解法一:枚举所有可能的aabb,判断是否为完全平方数
//先求出其平方根,查看是否为整数,即用一个 int型变量m存储sqrt(n)四舍五入后的整数,判断m*m?=n
for(int a=1;a<=9;a++)
{
for(int b=0;b<=9;b++)
{
int n=a*1100+b*11;
int m=floor(sqrt(n)+0.5);
if(m*m==n)
printf("%d\n",n);
}
}
//解法二:枚举平方根,从而避开开平方操作
for(int i=1; ;i++)
{
int n = i*i;
if(n < 1000) continue;
if(n > 9999) break;
int hi = n/100;//high two
int lo = n%100;//low two
if(hi/10 == hi%10 && lo/10 == lo%10)
printf("%d\n", n);
}
考虑浮点误差
最新推荐文章于 2022-09-07 16:17:48 发布