У меня есть программа, которая использует две функции, которые я определил внутри класса. Мой класс работает нормально, но моя программа всегда возвращает сумму, которая составляет некоторое количество выходных. Существует больше ошибок, когда даты находятся дальше друг от друга. Мой код предназначен для того, чтобы в одной функции вычислить общее количество дней с 1582 года, а другая функция вычитает большее количество из меньшего. Откуда я получаю ошибку? Я знаю, что это может быть не самый эффективный способ сделать что-либо (мудрый процессор), но может ли кто-нибудь найти, где моя логика запуталась? Это также относится к високосным годам. Я проверял свою программу на сайте http://www.timeanddate.com/date/durationresult.html
int Date::totalDays()
{
int totalDays = 0;
int daysInMonth[]={0,31,28,31,30,31,30,31,31,31,31,30,31};
totalDays += day;
for (int i = month-1; i > 0; i--)
{
totalDays += daysInMonth[i];
}
for (int i = year-1; i > 1582; i--)
{
if(year % 100 == 0)
{
if(year % 400 == 0)
totalDays += 366;
else
totalDays += 365;
}
else
{
if(year % 4 == 0)
totalDays += 366;
else
totalDays += 365;
}
}
return totalDays;
}
int Date::daysBetween(Date other)
{
if (this->totalDays() > other.totalDays())
return this->totalDays() - other.totalDays();
else
return other.totalDays() - this->totalDays();
}
Спасибо.
Проблема 1:
int daysInMonth[]={0,31,28,31,30,31,30,31,31,31,31,30,31};
должно быть
int daysInMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
// ^^
Проблема 2:
если текущий year
високосный год, и month
больше 2, вам также нужно добавить один день в аккаунт на 29 февраля текущего года.
Других решений пока нет …