본문 바로가기

Programming/Tutoring

윤년 답안 - 함수로 분할

#include <stdio.h>


int isLeap(int year); //윤년인지 구분해주는 함수

int yearDay(int year, int month, int day); //그 해의 몇번째 날인지 계산하는 함수

int totalDay(int year, int month, int day); //1900년 부터 총 날짜를 계산하는 함수

int Week(int total); //요일을 반환하는 함수

int main() {

int year, month, day; //년 월 일을 입력받을 함수

char week[7][5] = { {"일"},  {"월"}, {"화"}, {"수"}, {"목"}, {"금"}, {"토"} }; //요일을 초기화

char leap[2][3] = { {"평"}, {"윤"}};

int total = 0;

//년 월 일 입력

printf("년 월 일을 입력하시오 : ");

scanf_s("%d %d %d", &year, &month, &day);


total = totalDay(year, month, day);

//년 월 일 출력

printf("\n%d 월 %d 일 %s요일은 %d년의 %d번째 날이다. (%s년)\n\n"

, month, day, week[Week(total)], year, yearDay(year, month, day), leap[isLeap(year)]);

}

int isLeap(int year) {

if (year % 4==0) {

if (year % 100==0) {

if (year % 400 == 0)

return 1;

else return 0;

}

return 1;

}

else return 0;

}


int yearDay(int year, int month, int day) {

int i;

int monthF = 0; //해당 달의 마지막날

int sum = 0;

for (i = 1; i < month; i++) {

switch (i)

{

case 2: {

if(isLeap(year)) //윤년이면 29일까지

monthF = 29;

else monthF = 28; //평년이면 28일까지

break;

}

case 4: //30일 까지

case 6:

case 9:

case 11: monthF = 30; break;

default: monthF = 31; break; //31일까지

}

sum += monthF;

}

sum += day;

return sum;

}


int totalDay(int year, int month, int day) {

int i;

int total = 0;

for (i = 1900; i < year; i++) {

if (isLeap(year)) total += 366;

else total += 365;

}

return total + day ;

}


int Week(int total) {

int week = total % 7;

return week;

}

'Programming > Tutoring' 카테고리의 다른 글

05.14(화)_백준  (0) 2019.05.14
백준  (0) 2019.05.07
공모전  (0) 2019.04.02
윤년 참고 코드  (0) 2019.03.26
1주차 - 답안  (0) 2019.03.26