Ошибка в вечном календаре: все правильно работает до 28.02.0100 года - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. У меня такой вопрос. Делаю вечный календарь с 1.1.1 Получился такой кусок кода.
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 года. Ну по логике вещей, сотый год ведь високосный, он кратен 4. Почему тогда во всех календарях он не високосный (т.е. имеет 28 дней). Даже пес с ним. Если не учитывать этот год, все равно современные дни недели не совпадают. Помогите найти ошибку.

Решение задачи: «Ошибка в вечном календаре: все правильно работает до 28.02.0100 года»

textual
Листинг программы
if (i!=1 && (i%400==0 || (i%4==0 && i%100!=0)))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы