Xem thêm

Thuật toán kiểm tra năm nhuận trong C/C++, Python, Java

Huy Erick
Năm nhuận là gì? Để cài đặt thuật toán kiểm tra năm nhuận, chúng ta cần hiểu năm nhuận là gì? Năm nhuận là một năm có một số ngày bổ sung so với năm...

Năm nhuận là gì?

Để cài đặt thuật toán kiểm tra năm nhuận, chúng ta cần hiểu năm nhuận là gì?

Năm nhuận là một năm có một số ngày bổ sung so với năm thông thường. Thay vì có 365 ngày như năm thông thường, năm nhuận sẽ có 366 ngày, với ngày bổ sung được gọi là "ngày nhuận".

Nguyên tắc để xác định một năm có phải là năm nhuận hay không dựa trên các quy tắc sau:

  1. Năm chia hết cho 4 là năm nhuận, ví dụ: 2004, 2008, 2012, 2016.
  2. Tuy nhiên, các năm chia hết cho 100 không phải lúc nào cũng là năm nhuận. Ngoại trừ khi năm đó cũng chia hết cho 400, ví dụ: 2000.

Mục đích của việc có các năm nhuận là để đảm bảo lịch vẫn đồng bộ với mùa và vòng quỹ đạo của Trái Đất. Thêm một ngày vào lịch mỗi bốn năm giúp cải thiện tính chính xác và đảm bảo phù hợp với vòng quỹ đạo của Trái Đất.

kiểm tra năm nhuận Hình ảnh chỉ mang tính chất minh họa

Thuật toán kiểm tra năm nhuận

Để kiểm tra xem một năm có phải là năm nhuận hay không, chúng ta chỉ cần tuân theo 1 trong 2 nguyên tắc sau:

  1. Năm nhuận là năm chia hết cho 400.
  2. Năm nhuận là năm chia hết cho 4 nhưng không chia hết cho 100.

Mặc dù chúng ta thường nghe rằng "Cứ 4 năm lại có 1 năm nhuận", điều đó không hoàn toàn đúng. Trái đất cần 365.25 ngày để quay hết một vòng quanh mặt trời. Phần dư 0.25 đã làm tròn, nên số thực tế là 365.2425 ngày để trái đất quay một vòng. Sai số này là 0.0075 ngày (0.25 - 0.2425) khi nhân với 400, chúng ta sẽ có thêm 3 ngày. Do đó, để lịch chính xác, các chu kỳ 100, 200 và 300 chỉ có 24 năm nhuận thay vì 25. Riêng chu kỳ thứ 400 sẽ có 25 năm nhuận. Điều này đảm bảo rằng chu kỳ 400 năm sẽ có 97 năm nhuận, không phải 100.

Ví dụ:

  • Năm 400, 404,... là các năm nhuận.
  • Năm 500, 600,... không phải là các năm nhuận, do chúng chia hết cho cả 4 và 100.

Code kiểm tra năm nhuận

Sau đây là cách kiểm tra năm nhuận trên các ngôn ngữ lập trình khác nhau.

Kiểm tra năm nhuận trong C/C++

#include 
#include 

bool checkYear(int year) {
    // Nếu số năm chia hết cho 400,
    // đó là 1 năm nhuận
    if (year % 400 == 0)
        return true;

    // Nếu số năm chia hết cho 4 và không chia hết cho 100,
    // đó không là 1 năm nhuận
    if (year % 4 == 0 && year % 100 != 0)
        return true;

    // trường hợp còn lại,
    // không phải năm nhuận
    return false;
}

int main() {
    int year = 2000;
    if (checkYear(year) == true) {
        printf("%d là năm nhuận!", year);
    } else {
        printf("%d không phải năm nhuận!", year);
    }
    return 0;
}

Bạn có thể viết ngắn gọn hàm kiểm tra năm nhuận trên 1 dòng duy nhất như sau:

#include 
#include 

bool checkYear(int year) {
    // Trả về true nếu chia hết cho 4 nhưng không chia hết cho 100
    // hoặc chia hết cho 400
    return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
}

int main() {
    int year = 2000;
    if (checkYear(year) == true) {
        printf("%d là năm nhuận!", year);
    } else {
        printf("%d không phải năm nhuận!", year);
    }
    return 0;
}

Kiểm tra năm nhuận trong Java

class Main {
    static boolean checkYear(int year) {
        return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
    }

    public static void main(String[] args) {
        int year = 2000;
        System.out.println(checkYear(2000)? "Năm nhuận" : "Không phải năm nhuận");
    }
}

Kiểm tra năm nhuận trong C

Bạn chỉ cần sử dụng hàm có sẵn DateTime.IsLeapYear():

if (DateTime.IsLeapYear(year)) {
    // Thực hiện công việc tại đây
}

Kiểm tra năm nhuận trong Python

def checkYear(year):
    # Trả về true nếu year chia hết cho 4 nhưng không chia hết cho 100
    # hoặc chia hết cho 400
    return (((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0))

year = 2000
if (checkYear(year)):
    print("Năm nhuận")
else:
    print("Không phải năm nhuận")

Giờ bạn đã biết cách kiểm tra xem một năm có phải là năm nhuận hay không trên các ngôn ngữ lập trình khác nhau. Hãy sử dụng thuật toán này trong code của bạn để xử lý các tình huống liên quan đến năm nhuận một cách chính xác và dễ dàng.

1