~cpp 

#include <iostream> 
using namespace std; 
 
void judgeYundal(); 
void calanderoutput(); 
 
int addMonth[12] = {0,3,0,3,2,3,2,3,3,2,3,2};		// 월별 1일 위치 더해줘야 하는 날수 
int lastDayOfMonth[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
 
int yearInput, monthInput, count = 0, dateNumber = 1 , locationOf1stDay, addm; 
bool yundal; 
 
int main() 
{ 
        cout << "연을 입력하십시오 :"; 
        cin >> yearInput; 
        cout << "달을 입력하시오 :"; 
        cin >> monthInput; 
        judgeYundal(); 
 
        for (int x = 0 ; x < monthInput ; x++)							// 1년 1일 위치 
			addm += addMonth[x];

        if (yundal == true) {
            locationOf1stDay = (addm + yearInput + count - 1 + 6) % 7;	//
	       if ( monthInput > 2 )
		  locationOf1stDay++;
        } else {  // 각 년의 1일의 위치 
	   locationOf1stDay = (addm + yearInput + count + 6 ) % 7;		// 
        }
         
        calanderoutput(); 
 
        return 0; 
} 
 
void judgeYundal()		// 윤달의 횟수와 여부를 판단 
{ 
        for (int i = 0 ; i <= yearInput ; i++) 
        { 
                if ( i%100 != 0 && i%4 == 0) 
                        yundal = true; 
                else if ( i%100 == 0 && i%400 != 0) 
                        yundal = false; 
                else if ( i%400 == 0 ) 
                        yundal = true; 
                else 
                        yundal = false; 
                if (yundal == true) 
                        count++; 
        } 
} 
 
void calanderoutput()   // 달력의 출력 
{ 
	cout << "\t\t" << yearInput << "년\t" << monthInput << "월 달력\n\n"; 
	cout << "일\t월\t화\t수\t목\t금\t토" << endl;

	for (int j = 1 ; j<=6 ; j++) 
	{ 
		for (int k = 0 ; k <= 6 ; k++) 
		{ 
			if ( (j == 1 && k < locationOf1stDay) || 
				dateNumber > lastDayOfMonth[monthInput-1] || 
                                     (dateNumber == 29 && !yundal) ) {
				cout << " \t";
			} else { 
				cout << dateNumber << "\t"; 
				dateNumber++; 
			} 
		} 
			cout << "\n"; 
	} 
} 



Retrieved from http://wiki.zeropage.org/wiki.php/whiteblue/만년달력
last modified 2021-02-07 05:31:46