Hỏi về điều kiện kiểm tra năm nhuận

#include <stdio.h>
int main()
{
	int Nam;
	printf("nhap gia tri cua nam ", Nam);
	scanf("%d", &Nam);
	if(((Nam % 4 ==0) && (Nam % 100 != 0) || (Nam % 400 ==0)))
	printf("day la nam nhuan \n", Nam);
	else
	printf("khong phai la nam nhuan", Nam);
}

đây là BT về năm nhuận nếu điều kiện if đúng thì sẽ in ra là năm nhuận ạ, cho em hỏi về phần if ngay chỗ || ngay chỗ đó tại sao em thay là && không được vậy nếu thay thì nghĩa nó là vậy nếu nam chia hết cho 4 và chia hết cho 100 và chia hết cho 400 thì sẽ là năm nhuận, vậy sao khi ghi vào nó lại ra kết quả là else ạ :((((. Mong mọi người giúp đỡ em cảm ơn ạ

Bị nhầm ngoặc nhé. :smile:

if(((Nam % 4 ==0) && (Nam % 100 != 0)) || (Nam % 400 ==0))

1 Like

sao phải dùng hoặc ở cuối mà k dc dùng và vậy anh

Cái này tức là bạn chưa hiểu vì sao lại có quy tắc ntn phải ko :slight_smile:

1 vòng quay quanh MT cỡ 365.2425 ngày, vì vậy cứ 400 năm phải bỏ 3 ngày nhuận (leap day). (3/400 = 0.0075). Vậy là chỉ có năm chẵn 400 là năm nhuận, 3 năm kia không nhuận.

Nếu năm chia hết cho 400 thì ra TRUE => không bàn.
Nếu năm chia hết cho 4 nhưng ko chẵn trăm thì ra TRUE && TRUE = TRUE.
Nếu chẵn trăm thì bên trái ra FALSE và bên phải ra FALSE => FALSE.

Mình thì mình sẽ viết bằng XOR nhưng mà nó không nhanh bằng thôi :smiley:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?