Ошибка в вечном календаре: все правильно работает до 28.02.0100 года - C#
Формулировка задачи:
Всем привет. У меня такой вопрос. Делаю вечный календарь с 1.1.1 Получился такой кусок кода.
У меня все правильно до 28.02.0100 года. Ну по логике вещей, сотый год ведь високосный, он кратен 4. Почему тогда во всех календарях он не високосный (т.е. имеет 28 дней). Даже пес с ним. Если не учитывать этот год, все равно современные дни недели не совпадают. Помогите найти ошибку.
string temp = null; s = Console.ReadLine(); int day = 0; int month = 0; int year = 0; int a = 0; for (int i = 0; i < s.Length; i++) { if (s[i] == '.' || i == s.Length - 1) { switch (a) { case (0): { day = int.Parse(temp); } break; case (1): { month = int.Parse(temp); } break; case (2): { temp += s[i]; year = int.Parse(temp); } break; } a++; temp = null; } else { temp += s[i]; } } if (day < 0 || day > 31) throw new Exception(); if (month < 0 || month > 12) throw new Exception(); if (year < 0 || year > 9999) throw new Exception(); // int af=(int)( (year - 1) * 12 * 31 + (month - 1) * 31 + day ) % 7; long af = 0; short aa = 1; for (int i = 1; i < year; i++) { if (aa == 4 && i != 1) { aa = 0; af += 366; } else { af += 365; } aa++; } for (int i = 1; i < month; i++) { switch (i) { case (1): af += 31; break; case (2): if (aa == 4 ) af += 29; else af += 28; break; case (3): af += 31; break; case (4): af += 30; break; case (5): af += 31; break; case (6): af += 30; break; case (7): af += 31; break; case (8): af += 31; break; case (9): af += 30; break; case (10): af += 31; break; case (11): af += 30; break; case (12): af += 31; break; } } for (int i = 1; i < day; i++) { af++; } int fas = (int) af%7; switch (fas) { case (6): Console.WriteLine("Введенная дата Воскресенье."); break; case (0): Console.WriteLine("Введенная дата Понедельник."); break; case (1): Console.WriteLine("Введенная дата Вторник."); break; case (2): Console.WriteLine("Введенная дата Среда."); break; case (3): Console.WriteLine("Введенная дата Четверг."); break; case (4): Console.WriteLine("Введенная дата Пятница."); break; case (5): Console.WriteLine("Введенная дата Суббота."); break; }
Решение задачи: «Ошибка в вечном календаре: все правильно работает до 28.02.0100 года»
textual
Листинг программы
if (i!=1 && (i%400==0 || (i%4==0 && i%100!=0)))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д