[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

댓글

이 블로그의 인기 게시물

[PhotoShop] Text Logo

운영체제 유형

[C 언어] 하노이 탑 Tower of Hanoi