首先要明白
地球繞太陽運行周期為365天5小時48分46秒(合365.24219天),即一回歸年(tropical year)。公歷的平年只有365日,比回歸年短約0.2422 日,每四年累積約一天,把這一天加于2月末(2月29日),使當年的歷年長度為366日,這一年就為閏年。 按照每四年一個閏年計算,平均每年就要多算出0.0078天,經過四百年就會多出大約3天來,因此,每四百年中要減少三個閏年。所以規定公歷年份是整百數的,必須是400的倍數才是閏年,不是400的倍數的就是平年。比如,1700年、1800年和1900年為平年,2000年為閏年。閏年的計算,歸結起來就是通常說的:四年一閏;百年不閏,四百年再閏。
1、年份不是閏年的年份就是平年,
2、平年一年365天,陽歷2月28天;閏年一年366天,陽歷2月29天。
3、閏年能被4整除,平年不能。
簡單判斷
①一般的,能被4整除的年份是閏年,不能被4整除的年份是平年。
如:1988年2008年是閏年;2005年2006年2007年是平年。
②但是如果是世紀年(也就是整百年),就只有能被400整除才是閏年,否則就是平年。
如:2000年就是閏年,1900年就是平年。
③閏年的2月有29天,平年的2月只有28天
代碼判斷
代碼判斷某年是否是閏年的方法如下,從下面任一角度均可判斷出閏平年:
角度1:能被 4 整除,且不能被 100 整除的年份是閏年(非世紀年)。如2020,2004
角度2:
能被 400 整除的年份一定是閏年(能被400整除肯定能被100整除,故該年為世紀年)。如1600,2000,2400,2800
角度3:
能被 100 整除(世紀年),且不能被?400 整除的年份為平年。如1900
?
角度2,3可以看成一種,只是判斷條件反一下而已!
寫法一:
角度1+角度2
import java.util.Scanner;public class yearTest {public static void main(String[] args) {System.out.println("請輸入年份:");int year = new Scanner(System.in).nextInt();if (year%4==0){ //角度1//year%100==0說明是非世紀年 year%400!=0余數不為0表示不能被400整除//角度2:能被 400 整除的年份一定是閏年(能被400整除肯定能被100整除,該年為世紀年;//二者不可同時成立故用||“或”)。如1600,2000,2400,2800if (year%100!=0 || year%400==0){System.out.println(year%4+","+year%100+","+year%400);System.out.println(year+"是閏年");}else {System.out.println(year%4+","+year%100+","+year%400);System.out.println(year+"是平年");}}else {System.out.println("是平年");}}}
寫法二:
角度1+角度3
import java.util.Scanner;public class year {public static void main(String[] args) {System.out.println("請輸入年份:");int year = new Scanner(System.in).nextInt();if (year%4==0){ //角度1//year%100==0說明是世紀年 year%400!=0余數不為0表示不能被400整除//角度3:能被 100 整除(世紀年),且不能被?400 整除的年份為平年。如1900if (year%100==0 && year%400!=0){System.out.println(year%4+","+year%100+","+year%400);System.out.println(year+"是平年");}else {System.out.println(year%4+","+year%100+","+year%400);System.out.println(year+"是閏年");}}else {System.out.println("是平年");}}}
寫法三最簡:
import java.util.Scanner;public class yearTest2 {public static void main(String[] args) {System.out.println("請輸入年份:");int year = new Scanner(System.in).nextInt();//角度1:year % 4 == 0 && year % 100 != 0//角度2:year % 4 == 0 && year % 400 == 0 等同于 year % 400 == 0if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {System.out.println(year + "是閏年");} else {System.out.println(year + "是平年");}}}
代碼對比:
if (year%4==0){//year%100==0說明是世紀年 year%400!=0余數不為0表示不能被400整除if (year%100==0 && year%400!=0){
if (year%4==0){//year%100==0說明是非世紀年 year%400==0余數為0表示能被400整除if (year%100!=0 || year%400==0){
//角度1:year % 4 == 0 && year % 100 != 0//角度2:year % 4 == 0 && year % 400 == 0 等同于 year % 400 == 0
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
總結:?
滿足下列二者情況之一的為閏年,反之為平年:
非世紀年 且 能被 4 整除為閏年。
能被 400 整除為閏年。(能被400整除肯定可以被100整除,故為世紀年)
朋友:
看到這里了,點個贊再走吧!