我在我分配的問題找到一個數是否是perfect square與否:優化的方式,如果一個號碼是一個完美的方形
完美廣場是代數結構的元素等於 另一個元素的正方形。
例如:4,9,16等
什麼我的朋友們所做的是,如果n
是多少,他們循環n - 1
倍計算n * n
:
// just a general gist
int is_square = 0;
for (int i = 2; i < n; i++)
{
if ((i * i) == n)
{
std::cout << "Yes , it is";
is_square = 1;
break;
}
}
if (is_square == 0)
{
std::cout << "No, it is not";
}
我想出了一個解決方案如下圖所示:
if (ceil(sqrt(n)) == floor(sqrt(n)))
{
std::cout << "Yes , it is";
}
else
{
std::cout << "no , it is not";
}
它工作正常。
是否可以稱爲更優化的解決方案比別人?
雖然一個Java問題,這些算法也應該適用於C++(以及接受的答案使用C++):[確定整數的平方根是否爲整數的最快方法](http://stackoverflow.com/questions/295579/fastest-way- to-determine-if-an-integer-square-root-is-an-integer) – interjay 2014-08-27 16:31:26
除了所有其他的答案之外,還有一個bu您可以立即使用的一些技巧消除案例。例如,所有正方形以1,4,5,6,9和00結尾。 – Ben 2014-08-27 16:33:26
我不認爲你的解決方案是100%的傻瓜證明。這可能是sqrt(k * k)返回一個小於k(k-epsilon)的數字,然後floor將與ceil不同。 – ragnarius 2014-08-27 18:29:12