但是现在我遇到了另一个问题
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年。
我似乎无法弄清楚它的问题,并希望你能帮助解决我的问题 先感谢您。
答案 0 :(得分: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 :(得分:0)
你走了:
bool IsALeapYear(int year) {
return (!(year % 4) && (year % 100)) || !(year % 400);
}