c# - ¿La forma más corta de comprobar la plaza perfecta?
math.pow c# (4)
Esta es una variante para verificar si la raíz cuadrada es integral:
bool IsPerfectSquare(double input)
{
var sqrt = Math.Sqrt(input);
return Math.Abs(Math.Ceiling(sqrt) - Math.Floor(sqrt)) < Double.Epsilon;
}
Math.Ceiling
se redondeará al siguiente entero, mientras que Math.Floor
se redondeará hacia abajo. Si son iguales, bueno, ¡entonces tienes un entero!
Esto también puede ser escrito como un oneliner:
if (int(Math.Ceiling(Math.Sqrt(n))) == int(Math.Floor(Math.Sqrt(n)))) /* do something */;
Posible duplicado:
¿Qué es un buen algoritmo para determinar si una entrada es un cuadrado perfecto?
Quiero la forma más corta y sencilla de verificar que un número sea un cuadrado perfecto en C #
Algunos de los cuadrados perfectos:
1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ......
Probablemente verifique si la raíz cuadrada del número tiene alguna parte decimal, o si es un número entero.
Implementación, consideraría algo como esto:
double result = Math.Sqrt(numberToCheck);
bool isSquare = result%1 == 0;
isSquare
ahora debería ser true
para todos los cuadrados, y false
para todos los demás.
public bool IsPerfectSquare(int num)
{
int root = (int)Math.Sqrt(num);
return (int) Math.Pow(root,2) == num;
}
public bool IsPerferctSquare(uint number)
{
return (Math.Sqrt(number) % 1 == 0);
}