首页 > 代码库 > aabb问题

aabb问题

输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位也相等),此题也就是7744问题

此题不可用 if(sqrt(n)==floor(sqrt(n))),判断sqrt(n)是否为整数,因为存在一个精度问题。

floor函数用法:floor(x),有时候也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求的值左边的值,也就是不大于要求的值的最大的那个)。

实例:floor(3.14) = 3.0
   floor(9.999999) = 9.0

原型:#include <math.h>
   double floor( double arg );

详细用法链接:http://baike.baidu.com/link?url=kBABJWlmZ2nMTs9c_P1MKi6WCotbeFBY2aS9BP2mLrc6C9IsCV636tiBfFP1-YulZSuntRzpV5ePyn_mNCLP55-JIELJQL88AlJ0j1uDOxC

方法(1)

#include <iostream>
using namespace std;
int main()
{
    for(int i=1;i<10;i++)
        for(int j=0;j<10;j++)
        {
            int n=i*1100+j*11;
            int m=floor(sqrt(n)+0.5);
            if(m*m==n)
                cout<<n<<endl;
        }
        return 0;
}

 

方法(2)枚举法

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
    for(int x=30;;x++)
    {
        int n=x*x;
        if(n<1000)
            continue;
        if(n>9999)
            break;
        //取高位aa
        int hi=n/100;
        //取低位bb
        int lo=n%100;
        if(hi/10==hi%10&&lo/10==lo%10)
            cout<<n<<endl;
    }
    return 0;
}

 

aabb问题