闰年
作者:互联网
闰年的判断
下述所讲的闰年都是以公历(格里历)为基准,因为其他类似农历或者其他不一样,插入天数,可能插入一个月
为什么在详细理解和写一遍闰年的判断?
从一开始遇到给定一个年份,然后让你判断是不是闰年公历
,从一开始通过观看博客还有百科知道什么是闰年,和怎么判断一个年份是不是闰年,但过一段时间以后,当老师让我们在vim
上写一个闰年公历
的判断,或者其它特定的场合有关闰年的判断,又突然一脸懵逼,什么是闰年?怎么判断闰年?虽然有一些断断续续的的记忆片段,但总是有一些惘然,所以希望通过理解和写下来,加深自己的记忆和理解,知其然知其所以然。
为什么会出现闰年?
闰年公历
是一个日历年含有一个额外的一天加入,以保持所述同步的日历年天文或季节年。由于季节和天文事件在一整天内都没有重复,因此每年具有相同天数的日历会随着时间的推移而漂移。通过插入一年中的额外一天,可以纠正漂移
为什么会有额外的一天加入?
通常的解释是一年有多少天多少个小时和多少分,并不是完全的365天,累计达到一天即24小时以后,就多加一天的年就是闰年。
最根本的原因是地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年。公历的平年只有365日,比回归年短约0.2422日,所余下的时间约为每四年累计一天,故第四年于2月末加一天,使当年的历年长度为366日,这一年就为闰年。现行的公历每400年有97个闰年(精确,具体请看),这样经过四百年就会多出大约3天,因此每四百年要减少三个闰年,所以公历规定:年份是整百数时,必须是400的倍数才是闰年;不是400的倍数的世纪年,即使是4的倍数也不是闰年。
这就是通常所说的:四年一闰,百年不闰,四百年在闰,例如:2000年是闰年,2100年不是闰年
算法步骤
测试的年变量是表示公历中年份数的整数
如果 (年份不能被4整除) 那么 (这是平年)
否则如果 (年份不能被100整除) 那么 (这是闰年)
否则如果 (年份不能被400整除) 那么 (这是平年)
否则 (这是闰年)
Java程序
package informal_essay;
import java.util.Scanner;
//判断闰年(格里历)
public class LeapYear {
//排除法[所有非闰年]
public static boolean isLeapYear_1(int year) {
if (year % 4 != 0){
return false;
}else if(year % 100 != 0) {
return true;
}else if(year % 400 != 0){
return false;
}else {
return true;
}
}
//直取法[所有闰年]
public static boolean isLeapYear_2(int year){
if( (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0 )){
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println("输入一个年份:");
Scanner reader = new Scanner(System.in);
int year = reader.nextInt();
boolean isLeap_1 = isLeapYear_1(year);
boolean isLeap_2 = isLeapYear_2(year);
System.out.println("该年份是不是闰年:" + "isLeap_1:" + isLeap_1 + " " + "isLeap_2:" + isLeap_2 );
}
}
引用
- https://en.wikipedia.org/wiki/Leap_year
- https://baike.baidu.com/item/%E9%97%B0%E5%B9%B4/27098?fr=aladdin
标签:公历,年份,return,闰年,year,400 来源: https://www.cnblogs.com/ZHMhello/p/10352943.html