01/10/2018, 01:17

Cho em hỏi về BT C ạ

#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 
", 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 ạ

viết 03:18 ngày 01/10/2018

Bị nhầm ngoặc nhé.

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

Chau Phu Quang Huy viết 03:32 ngày 01/10/2018

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

rogp10 viết 03:27 ngày 01/10/2018

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

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

Bài liên quan
0