输出所有形如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);
}

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

转载于:https://www.cnblogs.com/giantRan/p/11118423.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值