Witam, czy mógłby ktoś podpowiedzieć gdzie w kodzie jest błąd, wydaje mi się że wyniki z programu są dobre.
#include <iostream>
void moveDay(uint8_t& week_, const int days)
{
const uint8_t monday = 0x40,
sunday = 0x01;
for (int i = 0; i < days; i++) {
if (week_ & sunday) {
week_ = monday;
continue;
}
week_ >>= 1;
}
}
void checkYear(const int& year_, uint8_t& week_)
{
if (!(year_ % 400)) {
moveDay(week_, 2);
return;
}
if (!(year_ % 4)) {
if (year_ % 100) {
moveDay(week_, 2);
return;
}
}
moveDay(week_, 1);
}
int main()
{
int t;
std::cin >> t;
for (int i = 0; i < t; i++) {
int year_input, year = 1, count = 0;
uint8_t week_a1 = 0x40, week_b1 = 0x40;
uint8_t week_a2, week_b2;
std::cin >> year_input;
do {
checkYear(year, week_a1);
checkYear(++year, week_b1);
} while (year < year_input);
week_a2 = week_a1;
week_b2 = week_b1;
do {
count++;
checkYear(year, week_a2);
checkYear(++year, week_b2);
} while ( !(week_a1 & week_a2)
|| !(week_b1 & week_b2));
std::cout << count << std::endl;
}
}