码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-07-02 09:31:47      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:经典   数字   方式   cas   竞赛   整数   枚举   div   col   

计算完全平方根可以使用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);
}

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

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

标签:经典   数字   方式   cas   竞赛   整数   枚举   div   col   

原文地址:https://www.cnblogs.com/giantRan/p/11118423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!