Seleccionar página

El día de hoy tenemos un día extra en el calendario debido a que el año 2016 es bisiesto, el algoritmo para determinar si un año es bisiesto lo podemos necesitar desde en un ejercicio de programación hasta en una entrevista de trabajo. Aquí discutiremos algunos de los métodos más comunes para resolver este problema en tres lenguajes distintos.

El algoritmo es el siguiente:

Un año es bisiesto si es exactamente divisible entre 4, excepto si es divisible entre 100. También es bisiesto si es divisible exactamente entre 400.

Una forma muy rápida de implementar esto sería con las siguientes comparaciones y el operador módulo (%)

bool esBisiesto = ((año % 4 == 0) && (año % 100 != 0)) || (año % 400 == 0)
if (esBisiesto) {
Console.WriteLine(«Es año bisiesto»);
} else {
Console.WriteLine(«No es año bisiesto»);
}

Nota: El ejemplo está en C# sin embargo puede adaptarse a casi cualquier lenguaje de programación.
Recordemos que el operador módulo devuelve el residuo de una división entre 2 enteros, si ese residuo es 0 significa que el primer número es divisible entre el segundo.

Vale la pena también mencionar algunas soluciones que proporcionan distintos lenguajes de programación para este problema:

Java

public static boolean esBisiesto(int año) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, año);
return cal.getActualMaximum(DAY_OF_YEAR) > 365;
}

En este ejemplo se usa la clase Calendar para verificar si el año indicado tiene más de 365 días, en tal caso es bisiesto.

JavaScript

function esBisiesto(año) {
return new Date(año, 1, 29).getMonth() === 1
}

Aquí recurrimos al constructor Date para generar una fecha con día y mes como 29 de febrero, si la fecha se puede construir correctamente el método getMonth devuelve 1.

C#

C# tiene una solución muy elegante, el tipo de dato DateTime incluye un método estático para verificar si un año es bisiesto:

bool esBisiesto = DateTime clomid sin receta.IsLeapYear(año);

Origen del algoritmo

Si acaso te preguntas por qué se tienen que realizar esas comparaciones con 4, 100 y 400 sigue leyendo:
La longitud aproximada de un año es de 365.242196 días, por lo que hay que añadir cerca de 1/4 de día al año para compensar (o añadir 1 día cada 4 años):
365.242196 – 0.25 = 364.992196

Esta es una buena aproximación, sin embargo se pasa por una centésima, hay que agregar esa centésima, evitando añadir un día cada 100 años:
364.992196 + 0,01 = 365.002196

El resultado está muy cerca de ser 365, hay que añadir ese día cada 400 años
365.002196 – 1/400 = 364.999696

Esta es la aproximación más usada, no se hacen más correcciones porque los años también varían en longitud, y esa cantidad solo difiere en diezmilésimas del resultado requerido que es 365.

Referencias
Año bisiesto, Java, JavaScript y C# en StackOverflow