Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- bool check_year(int year) {
- if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
- return true;
- }
- return false;
- }
- int calc_days_in_year(int arr[], int d1, int m1, int d2, int m2, int year) {
- if (m1 == m2) { // если обе даты относятся к одному месяцу
- return d2 - d1;
- }
- int count = 0;
- count += arr[m1 - 1] - d1; // считаем количество дней до конца первого месяца
- for (int i = m1; i < m2 - 1; i++) { // количество дней в полных месяцах
- count += arr[i];
- }
- count += d2; // количество дней с начала второго месяца
- if (check_year(year) && m1 <= 2) {
- count += 1;
- }
- return count;
- }
- int calc_days(int d1, int m1, int y1, int d2, int m2, int y2) {
- int arr[12]{ 31,28,31,30,31,30,31,31,30,31,30,31 };
- if (y1 == y2) {
- return calc_days_in_year(arr, d1, m1, d2, m2, y1);
- }
- else {
- int count = 0;
- count += calc_days_in_year(arr, d1, m1, 31, 12, y1);
- for (int i = y1 + 1; i < y2; i++) {
- check_year(i) ? count += 366 : count += 365;
- }
- count += calc_days_in_year(arr, 1, 1, d2, m2, y2);
- count += 1; // теряется переход с 31.12 на 01.01
- return count;
- }
- }
- int main() {
- setlocale(LC_ALL, "ru");
- cout << calc_days(1, 3, 1999, 14, 7, 2023) << endl; // 8901
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement