만년달력입니다.
~cpp
#include <iostream>
using namespace std;
void main()
{
bool fyun = 0; //윤달인지 아닌지 판별하는 변수. 0이면 윤달이 아니다. 1이면 윤달이다.
int countday = 0; //날짜 세는 변수.
int findday = 1; //매년 추가되는 날짜.
int endmonth, endline; //달의 끝, 주의 끝.
int year,month;
cout << "알고 싶은 년, 월, 입력해보시지!!";
cin >> year;
cin >> month;
if (year == 1)
findday = 1;
else
{
for (int i = 2;i<=year;i++)//각 년마다 밀리는 날짜 카운트
{
fyun = 0;
if((i-1)%4 == 0)
fyun = 1;
if((i-1)%100 ==0)
fyun = 0;
if((i-1)%400 == 0)
fyun = 1;
if (fyun == 1)
findday += 2;
else if (fyun == 0)
findday += 1;
}
}
for (int k = 1;k<month;k++)//각 년에서의 월까지의 중첩되는 날짜 카운트
{
if (k == 1 || k == 3 || k == 5 || k == 7 || k == 8 || k == 10 || k == 12)
countday += 31;
else if (k == 2)
{
fyun = 0;
if(year%4 == 0)
fyun = 1;
if(year%100 ==0)
fyun = 0;
if(year%400 == 0)
fyun = 1;
countday += (28+fyun);
}
else
countday += 30;
}
findday = (findday%7+countday)%7;//각 월 첫째날의 요일.
cout << year << "년\t\t\t" << month << "월" << endl;
cout << "Sun\t Mon\t Tue\t Wed\t Thr\t Fri\t Sat" << endl;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
endmonth = 31;
else if (month == 2)
{
fyun = 0;
if(year%4 == 0)
fyun = 1;
if(year%100 ==0)
fyun = 0;
if(year%400 == 0)
fyun = 1;
endmonth = (28+fyun);
}
else
endmonth = 30;
endline = findday;
for(int q = 0;q<findday;q++)
cout << "\t ";
cout << "1\t ";
for(int n = 2 ; n <= endmonth; n++)//출력부. endline은 주의 끝.
{
endline++;
if (endline == 7)
{
endline = 0;
cout << endl;
}
cout << n << "\t ";
}
cout << endl;
}