完美的正方形和完美的立方体
C++ 中是否有任何预定义函数来检查该数字是否是任何数字的平方以及立方体是否相同。
Is there any predefined function in c++ to check whether the number is square of any number and same for the cube..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
不,但是写一个很容易:
No, but it's easy to write one:
sqrt(x)
,或者一般来说,pow(x, 1./2)
或pow(x, 1./3)
对于示例:
编辑: 或一般情况:
sqrt(x)
, or in general,pow(x, 1./2)
orpow(x, 1./3)
For example:
Edit: or in general:
不,没有标准的 C 或 C++ 函数来检查整数是否是完美的平方或完美的立方。
如果您希望它速度快并避免使用大多数答案中提到的浮点/双精度例程,则仅使用整数编写二分搜索代码。如果你能找到一个 n 且 n^2 < m< (n+1)^2,则m不是完全平方数。如果 m 是完全平方数,那么您将找到 n,其中 n^2=m。 此处讨论了该问题
No, there are no standard c or c++ functions to check whether an integer is a perfect square or a perfect cube.
If you want it to be fast and avoid using the float/double routines mentioned in most of the answers, then code a binary search using only integers. If you can find an n with n^2 < m < (n+1)^2, then m is not a perfect square. If m is a perfect square, then you'll find an n with n^2=m. The problem is discussed here
试试这个:
Try this:
为了识别正方形,我在java中尝试了这个算法。几乎没有语法差异,你也可以用 C++ 来完成它。
逻辑是,每两个连续完全平方数之间的差继续增加 2。 Diff(1,4)=3 、 Diff(4,9)=5 、 Diff(9,16)= 7 、 Diff(16,25 )= 9..... 继续。
我们可以利用这种现象来识别完美的正方形。
Java代码是,
为了更快地识别平方,我们可以使用另一个现象,完美平方的递归数字和总是1,4,7或9。
所以更快的代码可以......
For identifying squares i tried this algorithm in java. With little syntax difference you can do it in c++ too.
The logic is, the difference between every two consecutive perfect squares goes on increasing by 2. Diff(1,4)=3 , Diff(4,9)=5 , Diff(9,16)= 7 , Diff(16,25)= 9..... goes on.
We can use this phenomenon to identify the perfect squares.
Java code is,
To make the identification of squares faster we can use another phenomenon, the recursive sum of digits of perfect squares is always 1,4,7 or 9.
So a much faster code can be...
最有效的答案可能是
这个方法之所以有效,是因为 x 是一个 int,并且它会删除小数部分以仅存储整数部分。如果一个数是整数的完全平方,则其平方根将是整数,因此 x 和 sqrt(x) 将相等。
The most efficient answer could be this
This method works because of the fact that x is an int and it will drop down the decimal part to store only the integer part. If a number is perfect square of an integer, its square root will be an integer and hence x and sqrt(x) will be equal.
对于完美的正方形,您还可以这样做:
对于完美的立方体,您可以:
希望这会有所帮助。
For perfect square you can also do:
For perfect cube you can:
Hope this helps.
我们可以使用内置的 truc 函数 -
We could use the builtin truc function -