Возникли проблемы с обнаружением високосного года

еще раз,
спасибо всем за помощь в моей предыдущей проблеме.

Однако теперь я столкнулся с другой проблемой

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 2cout << "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 passeddays = 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

Решение

Логика выбора високосного года от 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 года с предыдущего високосного года.

1

Другие решения

Ну вот:

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

По вопросам рекламы [email protected]