đây là cách bạn Nguyễn Văn Quân - Vietsource.net nghĩ ra, các bạn tham khảo nhé
Ngày đầu tiên trong lịch là ngày chúa ra đời ... đó là ngày 01/01/0001 và ban đầu thì mình tưởng nó là thứ 2 nên tính nhầm nhưng sau khi tính toán mình mới ngỡ ra ngày đầu tiên trong công nguyên là ngày chủ nhật ...
Để có thể tính được ngày hôm nay là thứ mấy thì bạn để ý ngày đầu tiên trong công nguyên là chủ nhật cái đã ...
Các bạn để ý là ngày 01/01/0001 là ngày chủ nhật vì nó là ngày đầu tiên và dĩ nhiên khi chia cho 7 (1/7) lấy phần dư thì ta sẽ có là 1 ...
Tương tự ngày 02/01/0001 là ngày thứ 2 vì tổng số ngày chia cho 7 lấy phần dư là 2 ...
Tiếp tục ta sẽ có nếu tổng số ngày của ngày ta tìm chia 7 dư 3 thì là thứ 3 ... và nếu dư 0 thì là thứ 7
À vậy nếu 1 ngày như ngày 01/03/2000 thì làm sao ta biết nó là thứ mấy ...
Áp dụng cách tính trên thì ta phải biết là từ ngày bắt đầu công nguyên đến ngày 01/03/2000 là có bao nhiêu ngày đã ...
Để tính được thì ta tính ngược từ số năm
bạn lấy năm -1 = 1999
Sau đó lấy : 1999*365 + 1999/4 = a
Nhớ là 1999/4 là khai báo 1999 là kiểu int nha vì mình cần lấy phần nguyên thôi không quan tâm phần dư
a ==> Chính là số ngày từ năm 01 đến năm 1999 đó
Sau đó bạn kiểm tra xem năm 2000 có phải năm nhuận không bằng cách lấy 2000/4 lấy phần dư nếu là 0 thì là năm nhuận ....
Nếu là năm nhuận thì bạn lấy tháng -1 sẽ bằng 2 và bạn tính ngày của 2 tháng đó
31+29 =b
b ===> là tổng số ngày của tháng 1 và 2
Sau đó bạn lấy a + b + 1 sẽ ra số ngày cần tìm và chia cho 7 lấy phần dư để xác định thứ
Chúng ta thử tính xem hôm nay ngày 22/7/2012 là thứ mấy nha.
số ngày từ 1/1/1 đến hôm nay là: 2011*365+2011/4+31+29+31+30+31+30+22=734721
Hôm nay là thứ: 734721%7=1 => CHủ nhật.
Code C cho bài toán:
Ngày đầu tiên trong lịch là ngày chúa ra đời ... đó là ngày 01/01/0001 và ban đầu thì mình tưởng nó là thứ 2 nên tính nhầm nhưng sau khi tính toán mình mới ngỡ ra ngày đầu tiên trong công nguyên là ngày chủ nhật ...
Để có thể tính được ngày hôm nay là thứ mấy thì bạn để ý ngày đầu tiên trong công nguyên là chủ nhật cái đã ...
Các bạn để ý là ngày 01/01/0001 là ngày chủ nhật vì nó là ngày đầu tiên và dĩ nhiên khi chia cho 7 (1/7) lấy phần dư thì ta sẽ có là 1 ...
Tương tự ngày 02/01/0001 là ngày thứ 2 vì tổng số ngày chia cho 7 lấy phần dư là 2 ...
Tiếp tục ta sẽ có nếu tổng số ngày của ngày ta tìm chia 7 dư 3 thì là thứ 3 ... và nếu dư 0 thì là thứ 7
À vậy nếu 1 ngày như ngày 01/03/2000 thì làm sao ta biết nó là thứ mấy ...
Áp dụng cách tính trên thì ta phải biết là từ ngày bắt đầu công nguyên đến ngày 01/03/2000 là có bao nhiêu ngày đã ...
Để tính được thì ta tính ngược từ số năm
bạn lấy năm -1 = 1999
Sau đó lấy : 1999*365 + 1999/4 = a
Nhớ là 1999/4 là khai báo 1999 là kiểu int nha vì mình cần lấy phần nguyên thôi không quan tâm phần dư
a ==> Chính là số ngày từ năm 01 đến năm 1999 đó
Sau đó bạn kiểm tra xem năm 2000 có phải năm nhuận không bằng cách lấy 2000/4 lấy phần dư nếu là 0 thì là năm nhuận ....
Nếu là năm nhuận thì bạn lấy tháng -1 sẽ bằng 2 và bạn tính ngày của 2 tháng đó
31+29 =b
b ===> là tổng số ngày của tháng 1 và 2
Sau đó bạn lấy a + b + 1 sẽ ra số ngày cần tìm và chia cho 7 lấy phần dư để xác định thứ
Chúng ta thử tính xem hôm nay ngày 22/7/2012 là thứ mấy nha.
số ngày từ 1/1/1 đến hôm nay là: 2011*365+2011/4+31+29+31+30+31+30+22=734721
Hôm nay là thứ: 734721%7=1 => CHủ nhật.
Code C cho bài toán:
- Code:
#include<conio.h>
#include<stdio.h>
void main()
{
clrscr();
int songay,ngay,thang,nam,thu;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("-------------CACH DOI NGAY SANG THU-------------\n");
printf("Moi ban nhap vao ngay can xem\n");
printf("Ngay: ");scanf("%d",&ngay);
printf("Thang: ");scanf("%d",&thang);
printf("Nam: ");scanf("%d",&nam);
songay=((nam-1)%7)*365+(nam-1)/4;
/* Do so qua lon nen minh lay phan du luon o day
khong lam sai thuat toan nhe*/
if(nam%4==0) a[1]=29;
for(int i=0;i<(thang-1);i++) songay+=a[i];
songay+=ngay;
thu=songay%7;
if(thu==1) printf("Ngay %d thang %d nam %d la chu nhat",ngay,thang,nam);
else if(thu==0) printf("Ngay %d thang %d nam %d la thu 7",ngay,thang,nam);
else printf("Ngay %d thang %d nam %d la thu %d",ngay,thang,nam,thu);
getch();
}