|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Dmitry V. Liseev 2:5020/400 29 Apr 2002 16:06:11 To : Alex E. Shestopalov Subject : Re: "Вечный календарь" -------------------------------------------------------------------------------- Alex E. Shestopalov <linker@viii.ntu-kpi.kiev.ua> wrote in message news:aaf3ha$1kf1$1@igloo.uran.net.ua... Hi! > > А в чем проблема? Вычисляешь разницу в днях между текущей датой > > и некоторым "базисом". Hапример 1 января 1600 года. Прибавляешь > > требуемое количество дней и конвертируешь обратно в год, месяц > > и день. Остаток от деления на 365, 31 и т.д. умеешь считать? > > Hу вообще-то не всегда год имеет 365, а месяц 31 день. Количество дней в "высокосном" 4-летии : 366+365*3=1461 Количество дней в "невысокосном" 4-летии : 365*4=1460 Количество дней в "высокосном" столетии: 25*1461=36525 Количество дней в "невысокосном" столетии: 1460+24*1461=36524 Количество дней в одном 400-летии: 36525+36524*3=146097 Если у тебя кол-во дней с 1.01.1600, то делишь на 146097 Получаешь кол-во 400-летий и остаток - кол-во дней с начала 400-летия. Из этого остатка вычитаешь первое столетие 36525, а если осталось больше 36524, то делишь на 36524. В результате получаешь конкретное столетие в ранее найденном 400-летии и остаток - кол-во дней в с начала столетия. Если ты попал в первое (высокосное) столетие, делишь на 1461, а если попал в следующие 3 столетия (невысокосных), то вычитаешь 1460 и делишь на 1461. Соответственно получишь конкретное 4-летие и смещение в нем в днях. Дальше рассказывать? Все, что нужно, это уметь делить нацело и вычислять остаток. > > Количество дней в каждом месяце года хранишь в массиве. > > В году 365 дней. В високосном - 366. > Hу батенька это вы дали! > В высокосном - 365(!) дней, а в обычном - 364. 1 апреля закончилось 28 дней назад. Следующее через 337 дней. > > Дальше правило такое: если > > год кратен 4 - он високосный, но если он кратен 100 - он уже > > не високосный (1900, 2100, 2200), а вот если кратен 400 - он опять > > високосный (2000, 2400, 2800). ____________________________ С уважением, Лисеев Дмитрий. http://private.peterlink.ru/dimik/ PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73 --- ifmail v.2.15dev5 * Origin: Peterlink News System (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/20753cc632a1b.html, оценка из 5, голосов 10
|