~cpp #include <iostream> #include <climits> using namespace std; void output(int , int); int deter_date(int, int); int lastdays(int, int); int how_much_days(int, int); int main() { int year, month; while (true) { cout << " : "; cin >> year; cout << " : "; cin >> month; if ( !year || !month ) break; if ( year <= 0 || year >INT_MAX || month <=0 || month>12) { cout << " ." << endl; continue; } output(year, month); } return 0; } void output(int year, int month) { int days = how_much_days(year, month); int date; if (year%400 != 0) date = deter_date(year%400, month); //(?) year%400 year ... ? //400기 year%400 결. else date = deter_date(400, month); cout << "====================================================" << endl << "\t\t\t\t\t금\t" << endl; for ( int j=0 ; j<date ; j++) // 기 cout << "\t"; for ( int i=0 ; i<days ; i++) //1 days까 { if ( date > 6 ){ // cout << endl; // 고 date=0; // } cout << i+1 << "\t"; date++; // } cout << endl << "====================================================" << endl; } int deter_date(int year, int month )// (0 , 6 ) { if ( month == 0 ){ year--; month = 12; } else if ( year == 1 && month == 1) return 1; // 1 1 return (lastdays(year,month) + deter_date(year, month-1)) % 7;// /* 고 거기 . 1 2 경 1 1 31고 (31 + 1) % 7 == 4 . */ } int lastdays(int year, int month)// 계 { int last; switch(month) { case 3: if ( year%4 == 0) { last = 29; if ( year%400 == 0 ) last = 29;// if ( year%4000 == 0 ) last = 28;// else if ( year%100 == 0 ) last = 28;// } else last = 28; break; case 5: case 7: case 10: case 12: last = 30; break; case 1: case 8: case 2: last = 31; break; case 4: case 6: case 9: case 11: last = 31; break; } return last; } int how_much_days(int year, int month) { int days; switch(month)// { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 2: if ( year%4 == 0) { days = 29; if ( year%400 == 0 ) days = 29;//경 if ( year%4000 == 0) days = 28;// 경 else if ( year%100 == 0 ) days = 28;//경 } else// 경 days = 28; break; case 4: case 6: case 9: case 11: days = 30; break; } return days; }