만년달력
~cpp
#include <iostream>
using namespace std;
int main()
{
int year,month;
cin >> year >> month; // 입력받음
int i,j,a;
int arr[6][7]={{'0',},};
int ThirtyOne=0;
for (i=1; i<month; i++) // ThirtyOne : month 이전의 달에서 31일이 있는 달의 갯수
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
ThirtyOne++;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
a = 31;
else if (month == 4 || month == 6 || month == 9 || month == 11)
a = 30;
else
a = 0; // a : 몇 월이 몇 일 까지 있는가.
int two = year / 4 - year / 100 + year / 400; // year 이전에 윤년의 갯수
int XOR;
if (month > 2) // 윤년인지 평년인지
{
if (year % 4 == 0)
{
if (year % 100 == 0)
{
if (year % 400 == 0)
{
XOR = +1;
if (a==0)
a = 29;
}
else
{
XOR = +2;
if (a==0)
a = 28;
}
}
}
else
{
XOR = +2;
if (a==0)
a = 28;
}
}
// first를 // 1년 1
int day = (((year-1) * 365 + two) + ((month-1) * 30 + ThirtyOne - XOR)) % 7;
int first = day + 1;
if (first == 7)
first = 0;
int y = 1; // 일.. 1-28,29,30,31
i=0;
int first_ = first;
for (first; first<7; first++) // 첫번째 줄의 배열 값 입력
{
arr[i][first] =y;
y++;
}
for (i=1; i<6; i++) // 두번째 줄 이후의 배열 값 입력
{
for (j=0; j<7; j++) //first는 1+ 전체 합 나누기 7의 나머지..
{
arr[i][j] = y;
y++;
}
}
cout << "일\t월\t화\t수\t목\t금\t토" << endl;
cout << "-----------------------------------------------------" << endl;
i=0;
for(int h=0; h<first_; h++)
cout << "\t";
for (first_; first_<7; first_++) // 첫번째 줄의 배열 값 출력
{
cout << arr[i][first_] << "\t";
}
cout << "\n";
for (i=1; i<6; i++) // 두번째 줄 이후의 배열 값 출력
{
for (j=0; j<7; j++) //first는 1+ 전체 합 나누기 7의 나머지..
{
if (arr[i][j] > a)
{
cout << "\n";
return 0;
}
cout << arr[i][j] << "\t";
}
cout << "\n";
}
return 0;
}