计算完全平方根可以使用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
时间: 2024-10-10 13:25:52