假设我有一个整数n
,我希望找到该数字的平方小于m
的最大数n
。
这个问题的最佳解决方案是什么?
答案 0 :(得分:9)
“最优解决方案”很少存在,但合理快速的算法如下(任何人都知道它的名字?),它被称为巴比伦方法:
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
是平方根的较低和较高近似值。在你的情况下,你需要较小的一个。
答案 1 :(得分:0)
由于你只是在寻找整数部分,你可以这样做:
int n = 123; //or whatever you want
int m = 1;
while (m * m <= n) {
m = m + 1;
}
return (m - 1);