[C 언어] 달력 알고리즘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include <stdio.h>
int isLeafYear(int year){
if(year % 400 == 0) return 1;
if(year % 100 == 0) return 0;
if(year % 4 == 0) return 1;
return 0;
}
int getDaysOfMonth(int year, int month){
if(month == 2){
if(isLeafYear(year)) return 29;
else return 28;
}
if(month <= 7){
if(month % 2 == 0) return 30;
else return 31;
}
else{
if(month % 2 == 0) return 31;
else return 30;
}
}
int PlusYear(int year){
int LYear = 0, Year = 0;
for(int i = 2012; i < year; i++)
if(isLeafYear(i)){ //윤년 체크
LYear++;
}
else{ //년도 체크
Year++;
}
}
return (365*Year + 366*LYear)%7; //연도(365) * 수 + 윤연도(366) * 수 를 7로 나눔
}
void main(){
int year;
printf("년도 : ");
scanf("%d", &year);
int firstDay = PlusYear(year);
const char* weekDays[] = {
"일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"
};
for(int month = 1; month <= 12; ++month){
printf("%d년 %d월 1일 %s\n", year, month, weekDays[firstDay]);
firstDay = (firstDay + getDaysOfMonth(year, month) - 28) % 7;
}
}
| cs |
댓글
댓글 쓰기