检查给定年份是否为闰年的算法介绍

99 阅读3分钟

在这篇文章中,我们提出了概念和算法来检查一个给定的年份是否是闰年。

简介

闰年是指每4年后出现的年份。闰年的不同之处在于,它有366天而不是365天。

地球绕太阳运行需要365.242190天,或365天5小时48分56秒。但为了简单起见,只有365天的整数天被视为一个日历年。如果不考虑一年中剩余的部分,在几个世纪的时间里,就会开始影响季节的周期性变化。
连续四年累计的0.25天被视为一天,然后加到第四年,这使它成为闰年。增加的这一天被加到2月,作为该月的第29天。

在一个世纪中,我们由于每四年的闰年而增加了25天,而实际上我们应该增加24.2375天。因此,我们在每100年中多加了0.7625天。因此,在四个世纪的跨度中,这个误差将变成3.05天。因此,为了避免每四个世纪都有3.05天的累积误差,决定在四个世纪中只有一个世纪有25个闰年,而其他世纪则有24个闰年。由于这个原因,并不是每四年都是闰年。规则是,如果该年可被100除以而不可被400除以,则跳过闰年。

本文的目的是建立一个程序,以确定输入的年份是否是闰年。

逻辑

一个年份要想成为闰年,必须满足以下条件:

  1. 该年是400的倍数。
  2. 该年是4的倍数,但不是100。

一个世纪的年份是100的倍数,并且以00结束。例如,1500年是一个世纪年。第二个条件是用来区分世纪年和闰年的。一个世纪年只有在它能被400除以的情况下才会被认为是一个闰年。例如,1200、1600和2000年都是世纪闰年。另一方面,1300、1500和1900是世纪年,不符合闰年的条件。

伪代码

如果年份能被400整除 ,则该年为闰年
如果年份能被4整除但不能被100整除 ,则该年为闰年
否则 该年为非闰年

为了更好地理解该伪代码,请参考以下流程图

START

执行情况

Python

year = int(input('Enter year: '))
if(year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)):
    print(year,'is a leap year')
else:
    print(year,'is not a leap year')

Java:

import java.util.*;

class LeapYear {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter year: ");
        int year = sc.nextInt();
        if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
            System.out.println("\n"+ year + " is a leap year");
        }
        else{
            System.out.println("\n"+ year + " is not a leap year");
        }
    }
}

C++:

#include <iostream>
using namespace std;

int main() {
    int year;
    cout << "Enter year: ";
    cin >> year;
    if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
        cout << year << " is a leap year";
    }
    else{
        cout << year << " is not a leap year";
    }
    return 0;
}

输出:

输入年份:2000年 2000年是一个闰年

通过OpenGenus的这篇文章,你一定对如何检查某个年份是否为闰年有了完整的认识。