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

计算完全平方根可以使用math库中的sqrt完成,但需要注意以下几点:a取值应为1-9,b取值为0-9;完全平方得到的结果是浮点型,
因为浮点型不像整形可能有误差的存在(TODO:浮点型计算误差),可以使用floor(sqrt(x)+0.5)来减小误差,这里稍微展开说下:如果sqrt(x)的结果本来是1,由于浮点计算的误差导致结果
为0.9999,那么cast到int型其结果就是0,因此用四舍五入的方式来减少这种误差(这涉及到浮点型的精度问题,如果精度较高的浮点表示,
那计算结果于预期的波动会相对较小,否则就可能存在较大偏差,当然现代编程语言的精度是可以适用这种方式的)

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

要去考虑误差略嫌麻烦,可以使用枚举的方式并根据aabb的特性去考虑它的千位百位以及十位个位是否分别相等

for (int i=31; ; i++) {  // 31^2为最大的小于1000的平方整数
    int n = i * i;
    if (n > 9999) break;
    
    int a = n / 100;
    int b = n % 100;
    if (a/10 == a%10 && b/10 == b%10) printf("%d", n);
}

 摘录自<<算法竞赛入门经典>>

猜你喜欢

转载自www.cnblogs.com/giantRan/p/11118423.html