Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 요일

<시간/>

날짜(일, 월, 연도)가 있다고 가정합니다. 이 날짜로부터 주어진 날짜의 요일을 찾아야 합니다. 이를 해결하기 위해 Zeller의 알고리즘을 사용합니다. Zeller의 알고리즘을 사용하여 요일을 구하는 공식은 여기

𝑤=$$\l그룹 d+\lfloor \frac{13(m+1)}{5} \rfloor+y+\lfloor\frac{y}{4} \rfloor+\lfloor\frac{c}{4} \rfloor +5c \r그룹 모드 7$$

수식에 일부 변수가 포함되어 있습니다. 그들은 -

d − 날짜의 날짜입니다.

m - 월 코드입니다. 3~12월은 3~12, 1월은 13, 2월은 14입니다. 1월이나 2월을 고려하면 해당 연도는 1만큼 감소합니다.

− 연도의 마지막 두 자리

- 연도의 처음 두 자리

- 평일. 0이면 토요일, 6이면 금요일

예를 들어 1997년 1월 4일의 요일을 얻으려면 출력은 "토요일"이 됩니다.

알고리즘은 다음과 같습니다 -

알고리즘

zellersAlgorithm(일, 월, 년)

입력 − 그날의 날짜.

출력 − (일요일부터 토요일까지) 어느 날이었습니다.

Begin
   if month > 2, then
      mon := month
   else
      mon := 12 + month
      decrease year by 1
   y := last two digit of the year
   c := first two digit of the year
   w := day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + 5*c
   w := w mod 7
   return weekday[w] //weekday will hold days from Saturday to Friday
End

예시(C++)

#include
#include
using namespace std;
string weekday[7] = {"Saturday","Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday"};
string zellersAlgorithm(int day, int month, int year){
   int mon;
   if(month > 2)
      mon = month; //for march to december month code is same as month
   else{
      mon = (12+month); //for Jan and Feb, month code will be 13 and 14
      year--; //decrease year for month Jan and Feb
   }
   int y = year % 100; //last two digit
   int c = year / 100; //first two digit
   int w = (day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + (5*c));
   w = w % 7;
   return weekday[w];
}
int main(){
   int day, month, year;
   cout << "Enter Day: "; cin >>day;
   cout << "Enter Month: "; cin >>month;
   cout << "Enter Year: "; cin >>year;
   cout << "It was: " <<zellersAlgorithm(day, month, year);
}

입력

(4, 1, 1997)

출력

Enter Day: 4
Enter Month: 1
Enter Year: 1997
It was: Saturday