我想找到两个数字A,B(数字可以是正数/负数)之间的完美平方。我也想实现O(sqrt(abs(B)))的时间复杂度。如何找到2个数字之间的整个方块
我写了下面的代码是:
count = (int)(Math.floor(Math.sqrt(Math.abs(B)) - Math.ceil(Math.sqrt(Math.abs(A))) + 1);
这通常效果很好,但是当范围是-ve到+数字已经失败。
例如是范围为A = 1,B = 1。然后我认为它应该返回2(0,1),但返回1
我无法找到在其他的答案的溶液中SO。所以,任何帮助将不胜感激。
为什么使用C++标签? – UnholySheep
我很满意Java/C++的解决方案。我对逻辑更感兴趣 – Sushil
'floor(sqrt(abs(1)))'是1,'ceil(sqrt(abs(-1)))'是1,所以如果你从另一个中减去一个并加1得到... 1.这里有什么问题?除此之外,请记住,使用双精度可能会导致精度问题,因此将其转换为int可能会产生意想不到的结果。 – Thomas