Въпрос относно задача 01. Charity Marathon от изпита на 23.10.2016
Здравейте! Пиша за втори път цялата тема, защото заби сайта поради някаква причина и 15 минути писане на вятъра... :D
Ще го напиша по-сбито сега, но общо казано имах проблем с първата задача от изпита. На нея изкарах 70/100 точки и се чудех доста време на какво се дължи. Пробвах по различни начини и така до онзи ден, когато бяхме в лекция и ми прещрака пак да се разровя в кода. Един човек седеше до мен тогава и беше така добър да ми погледне кода, а аз му обясних какъв ми е проблема. Той ми каза къде ми е грешката, а именно в закръглянето до втория знак. На изпита проверих в нета как се закръглява, за да съм сигурен, че го правя правилно, при което реших да пробвам по два начина - единия с Math.Round, а другия - директно при отпечатването. Първия път пробвах с Math.Round и не знам какъв ми е бил резултата, обаче след като опитах на кода си от изпита по този начин ми даде 90 точки, които не ми е дало по време на изпита (сигурно тогава ми е била друга грешката, но както и да е - не в това е въпроса). След това реших директно при изхода да закръглям чрез това, което видях в нета - Console.WriteLine("Money raised: {0:N2}", moneyRaised). Взимайте в предвид само {0:N2}.
Човека седящ до мен ми обясни, че не се прави с N2, ами с F2. От тук изниква фундаменталния ми въпрос, за който е цялата тема - каква е разликата между закръгляне с N2 и закръгляне с F2 и защо при изпита ми даде 70/100 точки при първото закръгляне, а с второто ми даде 100?
Поздрави.
Ахааа! Благодаря, особено много ми помогна, тъй като в нета не успях да намеря информация за това.
Аз имам малък проблем с тази задача и ще се радвам ако някой успее да ми подскаже къде греша... На тестовете ми дава 80/100, като ми гърмят последните два... което ме кара да си мисля че някъде препълвам но не мога да разбера къде?
Според мен ,тези редове не правят точно това което трябва да правят при препълване.Във вътрешните скоби има умножение на 3 променливи от тип int,като резултата от умножението ще е пак от тип int( 32-bit ).И вече като има препълване резултата ще е някакво отрицателно(може и положително да е,но пак ще е грешно умножението) число от рода на -312156656 и това отрицателно число се преобразува в long.
Но ако промениш тези редове на
long totalKm = ( (long)maxRunners * laps * lapLenght ) / 1000;
т.е преобразуваш maxRunners към long,то резултата от умножението вече трябва да е верен и да е от тип long