БлогNot. Длинногод всегда страшен?

Длинногод всегда страшен?

По стандарту ISO "длинный" год (53 недели) описывается такими эквивалентыми между собой правилами:

  • любой год, начинающийся в четверг и любой високосный год, начинающийся в среду;
  • любой год, заканчивающийся в четверг, и любой високосный год, заканчивающийся в пятницу;
  • годы, в которые 1 января или 31 декабря являются четвергами.

Все остальные годы нумерации недель являются короткими и имеют 52 недели.

Вот все длинногоды с 1800-го по 2100-й, не правда ли, что-то есть?

длинные годы с 1800 по 2100
длинные годы с 1800 по 2100

Консольная программка на C++ для подсчёта (проверена в Visual Studio 2019):

#include <iostream>
using namespace std;

inline int p (int year) {
 return (year + (year / 4) - (year / 100) + (year / 400)) % 7;
}

bool is_long_year (int year) {
 return p(year) == 4 || p(year - 1) == 3;
}

void print_long_years(int from, int to) {
 for (int year = from, count = 0; year <= to; ++year) {
  if (is_long_year(year)) {
   if (count > 0) cout << ((count % 10 == 0) ? '\n' : ' ');
   cout << year;
   count++;
  }
 }
}

int main() {
 cout << "Long years between 1800 and 2100:" << '\n';
 print_long_years(1800, 2100);
 cout << '\n';
 cin.get();
 return 0;
}

теги: дата c++

09.05.2020, 12:44; рейтинг: 49