闰年的来历及编程中闰年的算法

地球围绕太阳运转一圈为一年,一年有春夏秋冬四季。
按照公历算法,每一年从三月份开始,即春天开始,然后到第二年的二月份收尾,这算一年结束。

地球围绕太阳运转一周后回到起点,运行周期为365天5小时48分46秒,被称作回归年。
公历的记载一年的时间叫做平年,一年只有365天,比实际的运转周期少了0.2422天,每四年下来累积大概一天,为了弥补上差的这一天,把这一天加到了2月末(即2月29日),这样使当年时间长变为366日,这一年即是闰年。比如今年2016年,2月份有29天。非闰年只有28天。凡是2月份有29天的,都是闰年。闰年有366天。

需要注意的是,现在的公历是根据罗马人的"儒略历"改编而得。由于当时没有了解到每年要多算出0.0078天的问题,从公元前46年,到16世纪,一共累计多出了10天。为此,当时的教皇格雷果里十三世,将1582年10月5日人为规定为10月15日。并开始了新闰年规定。即规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。此后,平均每年长度为365.2425天,约4年出现1天的偏差。按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。
所以,闰年的判断条件就出来了:1,必须是4的倍数,即被4整除,并且这些年数不能是世纪年(尾数为00的,如1700,1800),即不能被一百整除。2,年数能被400整除的也是闰年。
条件1和条件2满足一项即是闰年。
即 1,year%4==0 && year%100 !=0
2,year%400==0
程序如下:
import java.util.Scanner;
public class Bissextile{
  public static void main(String[] args){
    System.out.println();//请输入一个数
    Scanner in = new Scanner(System.in);
    int year;
    year = in.nextInt();
   if(year<0||year>3000){
    System.out.println("格式有误");
    System.exit(0);
   }
   if((year%4==0&&year%100!=0)||(year%400==0))
System.out.println(year+"  是闰年");
   else
    System.out.println(year+"  不是闰年");

}


}
有时候需要循环输入一个数来验证是否是闰年,所以程序又有所改变如下
import java.util.Scanner;
public class Bissextile{
  public static void main(String[] args){
    System.out.println();//请输入一个数
    Scanner in = new Scanner(System.in);
    int year;
   year = in.nextInt();
while(year<0||year>3000){
    System.out.println("您输入的数不符合格式,请重新输入");
    year = in.nextInt();//重新接收一个数,继续判断,一旦符合,跳出循环,继续下面的IF语句
   }
   if((year%4==0&&year%100!=0)||(year%400==0))
System.out.println(year+"  是闰年");
   else
    System.out.println(year+"  不是闰年");


}


}
 
原文地址:https://www.cnblogs.com/java-dog/p/5180034.html