35657

Untitled

Jul 15th, 2023
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <string>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. bool CheckYear(int number) { // возвращает true если год високосный
  7.     if (number % 400 == 0 || number % 4 == 0 && number % 100 != 0) {
  8.         return true;
  9.     }
  10.     return false;
  11. }
  12.  
  13. int CalcDaysInYear(int arr[], int d1, int m1, int d2, int m2, int year){
  14.     if (m1 == m2) {
  15.         return d2 - d1;
  16.     }
  17.     int count = 0;
  18.     count += arr[m1 - 1] - d1; // количество дней до конца начального месяца
  19.     for (int i = m1 + 1; i < m2; i++) {
  20.         count += arr[i - 1]; // увеличиваем на количество дней в месяцах между датами
  21.     }
  22.     count += d2; // добавляем количество дней в последнем месяце
  23.     if (CheckYear(year) && m1 <= 2) { // если год високосный и январь либо февраль входят в выборку, прибавляем 1
  24.         count += 1;
  25.     }
  26.     return count;
  27. }
  28.  
  29. int CalcDays(int d1, int m1, int y1, int d2, int m2, int y2){
  30.     int arr[12]{ 31,28,31,30,31,30,31,31,30,31,30,31 };
  31.     if (y1 == y2) { // если года одинаковые, считаем дни между датами
  32.         return CalcDaysInYear(arr, d1, m1, d2, m2, y1);
  33.     }
  34.     int count = 0;
  35.     count += CalcDaysInYear(arr, d1, m1, 31, 12, y1); // прибавляем количество дней до конца y1
  36.     for (int i = y1 + 1; i < y2; i++) {
  37.         if (CheckYear(i)) { // прибавляем целые года между y1 и y2
  38.             count += 366;
  39.         }
  40.         else {
  41.             count += 365;
  42.         }
  43.     }
  44.     count += CalcDaysInYear(arr, 1, 1, d2, m2, y2); // прибавляем количество дней от начала y2
  45.     return count += 1;
  46. }
  47.  
  48. int main() {
  49.     cout << CalcDays(1, 3, 1999, 14, 7, 2023) << endl;
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment