Skip to content

Instantly share code, notes, and snippets.

@30mb1
Created November 19, 2015 07:39
Show Gist options
  • Save 30mb1/9865a127c9a9875527e1 to your computer and use it in GitHub Desktop.
Save 30mb1/9865a127c9a9875527e1 to your computer and use it in GitHub Desktop.
#include <iostream>
int DaysPerMonth(int numb, bool leap) { // Подсчет кол-ва дней в месяце.
if ((numb == 1) || (numb == 3) || (numb == 7) || (numb == 5)) {
return 31;
} else if ((numb == 8) || (numb == 10) || (numb == 12)) {
return 31;
} else if ((numb == 4) || (numb == 6) || (numb == 9) || (numb == 11)) {
return 30;
} else if (leap == true) {
return 29;
} else if (leap == false) {
return 28;
}
}
void Leap(const int year, bool &leap) { // Определение високосности года.
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
leap = true;
} else {
leap = false;
}
}
int main() {
int day, month, year, AllDays = 0, difference;
int i = 0, j = 0, endYear = 1, endMonth = 1, endDay, AllleapYears;
bool leap;
std::cin >> day >> month >> year >> difference;
Leap(year, leap);
for (i = 1; i < month; i++) { // Считаем прошедшие дни в текущем году(только полные месяцы).
AllDays = AllDays + DaysPerMonth(i, leap);
}
AllleapYears = ((year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400);
AllDays = AllleapYears * 366 + (year - 1 - AllleapYears) * 365 + AllDays + day;
//Имеем дату, полностью переведенную в дни.
AllDays = AllDays + difference;
for (;;) { //Считаем кол-во лет в измененной дате.
j++; //Счетчик лет.
Leap(j, leap);
if (AllDays - 365 - leap > 0) {
AllDays = AllDays - 365 - leap;
endYear++;
} else {
break;
}
}
Leap(endYear, leap);
for (i = 1; i <= 12; i++) { // Считаем кол-во месяцев в измененной дате.
if (AllDays > DaysPerMonth(i, leap)) {
AllDays = AllDays - DaysPerMonth(i, leap);
endMonth++;
} else {
break;
}
}
endDay = AllDays;
std::cout << endDay << " " << endMonth << " " << endYear;
system("pause");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment