当前位置: 首页 > news >正文

如何区分闰年与平年

首先要明白

地球绕太阳运行周期为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整除,故为世纪年)

朋友:

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

http://www.lryc.cn/news/129915.html

相关文章:

  • 中间件(下)
  • LVS-DR的RS进行ARP抑制的原因和LVS持久连接配置
  • 【HarmonyOS】codelab在hvigor版本2.4.2上无法运行问题
  • MySQL- sql语句基础
  • 【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍
  • 【环境配置】Windows10终端和VSCode下能够直接打开Anaconda-Prompt
  • 稚晖君人形机器人问世:大模型加持,会自己换胳膊,要上生产线造车
  • 变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践
  • 亚马逊产品排名关键因素解析,通过测评干预需要具备哪些条件
  • leetcode原题:绘制直线(位运算)
  • jenkins 安装和通过gitee 拉取PHP项目
  • 解析TCP/IP协议的分层模型
  • ARM M33架构入门
  • CentOS系统环境搭建(四)——Centos7安装Java
  • Arduino MQTT客户端库PubSubClient快速入门
  • 视频集中存储/云存储/磁盘阵列EasyCVR平台接入RTSP设备出现离线情况的排查
  • 部署Springboot项目注意事项
  • 深度解析:DDoS攻击与先进防御策略
  • NLP | 论文摘要文本分类
  • Linux / Ubuntu磁盘扩容
  • 【ChatGPT 指令大全】怎么使用ChatGPT来辅助知识学习
  • URL编码指南
  • Java mail邮件开发 OA办公系统
  • ElasticSearch的客户端操作
  • 如何快速的合并多个PPT使之成为一个PPT?
  • 【微信小程序】列表滚动触底更新实现
  • 2023全国大学生数学建模竞赛A题B题C题D题E题思路+模型+代码+论文
  • Git常见操作
  • thinkphp6前后端验证码分离以及验证
  • jenkinsfile自动部署接口