在检测闰年方面有问题

Having problems with detecting leap year

本文关键字:有问题 方面 闰年 检测      更新时间:2023-10-16

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

我似乎弄不清这个问题,希望你能帮我解决这个问题提前谢谢。

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

此外,您需要将leapcounter初始化为2,因为1对应于1970的第一天——自上一个闰年以来的2年。

开始:

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