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 年。

我似乎无法弄清楚它的问题,并希望您能帮助阐明我的问题,谢谢您。

4

2 回答 2

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)) ;

此外,您需要初始化leapcounter2自上一闰年以来1的第一天- 2 年。1970

于 2014-04-26T05:54:05.627 回答
0

干得好:

bool IsALeapYear(int year) {
    return (!(year % 4) && (year % 100)) || !(year % 400);
}
于 2014-04-26T08:46:29.467 回答