我一直在试着编一个程序,它能给我一个数字n
的除数,这个除数最接近它的平方根。
我试着用这个程序来完成这个任务:
public static int closestDivisor(int n) {
for (int i = n/ 2; i >= 2; i--) {
if (n % i == 0) {
return i;
}
}
return 1;
}
但是,当我运行这个:
System.out.println(closestDivisor(42));
当期望6
或7
时,我得到21
,因为它们是42的最接近的约数。
3条答案
按热度按时间plupiseo1#
此代码应返回能整除n且小于或等于n平方根的最大数。
然后你可以看看这个数字,我们称之为answer和n/answer,其中一个肯定是最接近n平方根的n的因子。为了看哪个是哪个,我们可以比较n - answer*answer和(n/answer * n/answer)- n,看哪个更小;如果第一差值较小,则应答更接近N,否则N/应答更接近N。
guykilcj2#
这里有一个办法。
< 0 or 1 if < 4
,则返回-1
n
是正平方,则返回平方根。现在在循环内部,从
square root
开始,向外检查平方根的两边是否整除。-1
。i
除以n
,i
通过divisor
返回k
除以n
,k
通过divisor
返回。myzjeezk3#
试试这个