еще раз,
спасибо всем за помощь в моей предыдущей проблеме.
Однако теперь я столкнулся с другой проблемой
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.
Я не могу понять проблему с этим и надеюсь, что вы могли бы помочь пролить свет на мою проблему
заранее спасибо.
Логика выбора високосного года от 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);
}