7744问题

输出所以形如aabb的四位完全平方数

#include 
#include
int main()
{
    int a,b,n;
    double m;
    for(a=1;a<=9;a++)
    {
        for(b=1;b<=9;b++)
        {
            n=a*1100+b*11;
            m=sqrt(n);
            if(floor(m+0.5)==m)printf("%d\n",n);
        }
    }
     return 0;
}`

floor(x)返回x的整数部分,那么为什么不直接比较floor(m)和m呢?原因是:浮点数的运算(和函数)有可能存在误差——不是一定存在,但经常有。
假设在经过大量计算后,由于误差的影响,整数1变成了0.9999999999,floor的结果是0而不是1!为了减小误差的影响,我们一般改成四舍五入,即floor(x+0.5)。如果难于理解,可以想象在数轴上把一个单元区间往做移动0.5个单元的距离。floor(x)等于1的区间为[1,2),而floor(x+0.5)等于1的区间为[0.5,1.5).

另一个思路是枚举平方根。

#include 
int main()
{
    int x,n,hi,lo;
    for(x=32;;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);
    }
     return 0;
}

你可能感兴趣的:(题目,7744问题)