[Programming Fundamentals] 01.Exam Prep. Sino The Walker
Здравейте, ако може някой да ми разясни няколко реда от алгоритъма за пресмятане на секундите на Наков ще съм много благодарен.
Виждам, че първо
long seconds = timeLeaving[2] + 60 * timeLeaving[1] + 60 * 60 * timeLeaving[0];
има връзка с
var secs = seconds % 60;
var mins = (seconds / 60) % 60
var hours = (seconds / 60 / 60) % 24;
https://pastebin.com/MpTsqhnR Код:
но някак не схващам от къде първоначално идват тези допълнителни събирания и умножения с 60. Схващам, че идеята е явно за да може след това да се разделят на 60 и че е някакъв алгоритъм, но не разбирам как работи като цяло. Едно обяснение би било оценено!
EDIT: Мисля, че разбрах как работи всичко вече, но първия ред ми се струва описан доста объркващо, според мен този еквивалент е много по-ясен :
long seconds = timeLeaving[2] + (timeLeaving[1] * 60) + (timeLeaving[0] * 60 * 60);
Със скоби..
Привет.
Смятам, че ще ти е най-лесно задачата да бъде обяснена по подобаващ начин. Кенов обяснява задачата от 1 до 40 минута в този клип - https://softuni.bg/trainings/resources/video/12815/video-screen-20-february-2017-ivaylo-kenov-programming-fundamentals-january-2017.
Поздрави,
Мелик.
Ето тук: int seconds = steps * timePerSteps; Ако steps и timePerSteps са максималните стойности по условие, то тогава произведението им seconds няма да се събере в int.
Освен това тук: leave = leave.AddSeconds(seconds); не е нужно да добавяш милиони секунди, при положение, че по условие не се изисква да се пресметне за колко дни ще се прибере лирическия герой. По този начин рискуваш да ти хвърли някой exeption. Просто използвай остатъка от делението на (секундите в един ден).
Успех.
Благодаря за помощта!
Сметнах ги чрез BigInteger, но трябваше да променя и единиците към decimal, за да се получи. Ето и работещия код, ако някой се интересува: https://pastebin.com/ZRdB2u9v
Поздрави.