Lại chuyện năm nhuận hay không nhuận, dân học lập trình khóc thét

Submitted by superthin on 16/10/2019 - 08:26:37
Năm nhuận tính thế nào

Thi thoảng Thin đọc bài trên các website dạng diễn đàn (cộng đồng) trao đổi các vấn đề đủ thứ, trong đó phần lớn liên quan đến tin học, máy tính, mạng mẽo các kiểu,... và phát hiện ra rằng câu hỏi về thuật toán kiểm tra năm nhuận được hỏi từ năm này qua năm khác mà vẫn có nhiều người chưa thỏa mãn. Trong khi đó, tìm kiếm Google là miễn phí, và chắc chắn thuật toán kiểm tra năm nhuận là một cái gì đó rất dễ tìm, được giải thích một cách chu đáo.

Thôi thì thay vì cứ phải trả lời ở mấy cái trang cộng đồng kia, Thin viết quách bài này cho xong. Sau này gặp ai hỏi sẽ "quăng cho cái link" tới bài này có phải đơn giản, gọn ghẽ hơn không.

Năm nhuận là gì?

Năm nhuận (đang đề cập dương lịch, còn gọi là lịch Gregorian) được định nghĩa là năm có 366 ngày thay vì 365 ngày như những năm bình thường. Như vậy, ngày thừa ra đó sẽ được "nhét vào tháng Hai", tức là năm nhuận chính là năm mà tháng Hai có 29 ngày, và năm đó 366 ngày.

Làm sao để biết năm nào là năm nhuận?

Nhìn vào năm đó, nếu nó là số lẻ, kết luận ngay nó không phải là năm nhuận mà không lôi thôi gì thêm.

Cách thô thiển và dễ dàng nhưng mệt mỏi (mất nhiều thời gian) nhất đó là hãy tìm một năm là năm nhuận rồi cứ cộng thêm 4 hoặc trừ 4 mãi cho đến năm cần kiểm tra có phải năm nhuận hay không, nếu phép cộng/ trừ đó là khớp thì năm cần kiểm tra chắc chắc là năm nhuận. Một ví dụ:

Kiểm tra xem năm 2016 có phải là năm nhuận hay không? Cách làm "kém cỏi" nhất đó là bạn biết năm 2000 là năm nhuận, vậy cứ cộng 4 mãi xem sao: 2000 + 4 + 4 + 4+ 4 = 2016, như vậy 2016 là năm nhuận.

Hổng lẽ cứ chơi cái cách cộng/ trừ như điên kia để tìm năm nhuận? Tất nhiên, người ta có cách khác, sớm được trình bày bên dưới.

Bước 1: lấy năm đó chia cho 4 xem có ra số tròn không? Nếu ra số tròn, chuyển qua bước 2. Nếu không phải số tròn, nhảy qua bước 5.

Bước 2: lấy năm đó chia cho 100 xem có tròn không? Nếu ra số tròn, chuyển qua bước 3. Nếu không tròn, nhảy qua bước 4.

Bước 3: lấy năm đó chia cho 400 xem có tròn không? Nếu ra số tròn, chuyển qua bước 4. Nếu không tròn, nhảy qua bước 5.

Bước 4: kết luận đây là năm nhuận.

Bước 5: kết luận đây không phải là năm nhuận.

Sơ đồ thuật toán tính năm nhuận

Nếu bạn dùng phần mềm phần mềm bảng tính Microsoft Excel (hoặc Google Sheets/ một phần mềm bảng tính nào đó có hỗ trợ công thức Excel), bạn nhập công thức sau vào một ô bất kỳ, và nhập năm vào ô A1:

=IF(OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)<>0)),"Năm nhuận", "Không phải năm nhuận")

Chú ý: giải thuật trên lấy trộm từ trang microsoft.com./.