假设我有一个整数n
,我想找到该数m
的平方小于的最大数n
。
这个问题的最佳解决方案是什么?
“最优解”很少存在,但一个相当快的算法如下(有人知道它的名字吗?),它被称为巴比伦方法:
int num = 4567;
int r1 = num / 2;
int r2 = 2;
while (std::abs(r2 - r1) > 1) {
r2 = (r1 + r2) / 2;
r1 = num / r2;
}
这里r1
和r2
是平方根的较低和较高的近似值。在您的情况下,您将需要较小的那个。
由于您只是在寻找整数部分,您可以这样做:
int n = 123; //or whatever you want
int m = 1;
while (m * m <= n) {
m = m + 1;
}
return (m - 1);