2014-04-26 1 views
1

avHi, 이전 문제의 도움에 감사드립니다.윤년 검출 문제가 다시 발생하여

은 그러나 지금은 또 다른 문제

int main() 
    { 
     int inputSeconds,seconds, minutes, hours , days ,years ; 
     int remainingSeconds ; 
     int current_year = 1970; 
     int current_month = 1; 
     int current_day = 1; 
     const int standard_year = 365; 
     const int leap_year = 366; 
     bool leapYear; 
     int leapcounter ; //Since 1972 is the next closest leap year, counter is set to 2 


     cout << "Welcome to Epoch time/ Data converter" << endl; 
     cout << "Enter Number of Seconds Since Midnight Jan 1, 1970: "; 
     cin >> inputSeconds ; 


     //Convert seconds into days to determine the number of years that has already passed 


     days = inputSeconds/(60*60*24) ; 
     remainingSeconds = inputSeconds % (60*60*24) ; 


     cout << days << endl; 
     //Determine current year 

      while (!(days < 365)) 
      { 
      if (leapcounter == 3) 
       { 
        current_year++; 
        days -= leap_year; 
        leapYear = true; 
        leapcounter = 0; 

       } 
      else 
       { 


        current_year++; 
        days -= standard_year; 
        leapcounter++; 
        leapYear = false; 

       } 
      } 


      //Check if current year is leap year or not 

      if ((current_year % 4 == 0) && (current_year % 100 == 0) || (current_year % 400 == 0)) 
       leapYear = true; 
      else 
       leapYear = false; 



     cout << current_year << " days remaining :" << days << " Leap year? " << leapYear << " Remaining seconds :" << remainingSeconds; 

     return 0; 

}는 출력에 윤년을 검출있을 것 같지 않습니다

가 발생했습니다. 나는 그것으로 문제를 알아 내기 위해 1972, 2004,2008, 2012

나는 것 기운을 시도하고 내 문제 을 밝혀 도움이 사전에 감사합니다 수 기대하고있다.

+1

당신은 사용자가 입력 유닉스 시대 이후의 초 수를 가지고 상태. 어떻게 시간을 보내고 있습니까? 1972 년, 2004 년 등? 아니면 UNIX 타임 스탬프로? 유닉스 시간에 – jrd1

+0

, 1325376000 등 – user3571343

답변

1

current_year에서 윤년을 결정하는 논리는 가지고있는 것보다 약간 복잡합니다.

그것은 할 필요가 :

if ((current_year % 4 == 0)) 
{ 
    if ((current_year % 100 == 0)) 
    { 
    if ((current_year % 400 == 0)) 
    { 
     leapYear = true; 
    } 
    else 
    { 
     leapYear = false; 
    } 
    } 
    else 
    { 
    leapYear = true; 
    } 
} 
else 
{ 
    leapYear = false; 
} 

더 생각에, 그 논리를 단순화 할 수 있습니다

leapYear = ((current_year % 400) == 0 || 
      ((current_year % 4) == 0 && (current_year % 100) != 0)) ; 

는 또한, 당신은 일 1 이후 2leapcounter를 초기화 할 필요가 첫 번째에 해당 일 1970 - 이전 윤년 이후 2 년. 여기

+0

예! 그 트릭을했다. 고맙습니다. 왜 그런 식으로 나가야하는지 설명해 주시겠습니까? – user3571343

+0

거기에있는 약간의 코드가 좀 더 간결한 것에 대한 답을 참조하십시오. –

0

당신은 이동 : 프로그램에서

bool IsALeapYear(int year) { 
    return (!(year % 4) && (year % 100)) || !(year % 400); 
}