오늘은 특별히 소스부터
#include <stdio.h>
#include <stdlib.h>
int calc(int,int,int,int);
int main()
{
int a,b,c,d;
int year;
char buf[5],buf2[3];
char *day[7]={"일","월","화","수","목","금","토"};
printf("날짜: ");
scanf("%4d%2d%2d",&year,&c,&d);
printf("%d년 %d월 %d일",year,c,d);
if(c<=2)
{
year-=1;
c+=12;
}
a=year/100;
b=year%100;
printf("\n%s요일\n",day[calc(a,b,c,d)]);
printf("%d %d %d %d",a,b,c,d);
system("PAUSE");
return 0;
}
int calc(a,b,c,d)
{
return ((21*a/4)+(5*b/4)+(26*(c+1)/10)+d-1)%7;
}
아 내가 봐도...제라의 공식은
((21*a/4)+(5*b/4)+(26*(c+1)/10)+d-1)%7;
a는 연도의 앞 두자리 b는 연도의 뒤 2자리.
c는 월, d는 일.
예를 들어 2007년 07월 07일은
a=20,b=7,c=7,d=7;
참쉽죠?
그리고 하나 더해야될 게 있어요.
c(월)가 1이나 2일경우 연도는 -1을 하고 1은 13, 2는 14로 바꿔줘야해요
예를들면
2007년 01월 01일은
a=20,b=6,c=13,d=1;
참쉽죠?
위 공식을 사용해 나온 값에 따라 요일을 정합니다.
0=일요일
1=월요일
2=화요일
3=수요일
4=목요일
5=금요일
6=토요일
이제 위에 있는 소스를 보시면 다 이해가 가실거에요.
ps.이걸로 달력도 출력하는건가?
char *day[7]={"일","월","화","수","목","금","토"};
이부분은 char* day[] = {"일","월","화","수","목","금","토"};
으로 바꾸시는게 더 좋아요~ 결과는 똑같지만, 나중에 명박요일 이런게 추가되면, 앞의 7을 바꾸지 않아도 되니깐요 ^^
하하하 명박요일 ㅇㅅㅇ
생기면 어떡하지........
아마도 휴일이겠죠?
안녕하세요,환타님~
제 블로그에 댓글 남기셨길래 놀러왔답니다.
뭔지 모르지만 포스트가 어마,,;; 워낙에 웹서핑만 겨우 하는지라...
좋은 글 보러 또 들릴께요~ 가끔 저의 보잘것없는 블로그도 방문해 주심
감사 할꺼에요^^; 즐거운 하루 되세요!
고맙습니다
제 블로그에도 자주 들러주세요 흐흐흐.
이야! 신기하다...
잘 봤습니다.
예전에 이거 계산한다고 삽질했던 기억이 있는데...
(1950년 정도부터 시작해서 윤년이 아니면 1 더하고, 윤년이면 2 더하는 클래식한(?) 방법...)
클래식한 방법이 가장 좋죠 ㅎㅎ
위 공식을 사용해서 저도 달력 출력하는 프로그램 만들어볼 생각이에요.
제라의 공식이 먹히는 그레고리력(1582년 10월 15일)부터 쭈욱~~~
http://navercast.naver.com/science/math/2047
우연히 서핑하다 보고 댓글 남깁니다.
요일 구하는 여러 공식이 있나보군요..