如何区分闰年与平年

首先要明白

地球绕太阳运行周期为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,2800
            if (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 整除的年份为平年。如1900
	            if (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 == 0
		if (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整除,故为世纪年)

如何区分闰年与平年_第1张图片

朋友:

看到这里了,点个赞再走吧!

你可能感兴趣的:(算法题,java,if语句)