Професионална програма
Loading...
stanislav.ib avatar stanislav.ib 4 Точки

[Programming Fundamentals] Data Types and Variables - 10. Data Overflow

Здравейте, реших една задача по малко тъп начин,видях по-добрия ,но се мъча да разбера защо моят вариант ми дава 90 от 100 - не гърми при нулевите.
Сто пъти прегледах всичко,но не мога да открия къде греша.
Помощ? :)

 

https://pastebin.com/WSmvS2SQ

0
Programming Fundamentals 19/06/2017 15:00:27
icowwww avatar icowwww 980 Точки
Best Answer

Здравей, доста дълго гледах решението ти докато накрая стигнах до извода, че трябва да разбера теста какъв е. Оказа се, че 7мия тест в джъдж е:

num1 == ulong.MaxValue

num2 == по-малко число, но пак ulong

Решението ти даваше, че превърта ulong 0 пъти в този случай, а трябва да изкара

bigger type: ulong
bigger type: ulong
ulong.MaxValue can overflow ulong 1 times. Защото е точно на границата

добавих проверка за този частен случай и мина със 100/100, много гаден тест :)

0
18/06/2017 00:58:30
stanislav.ib avatar stanislav.ib 4 Точки

Благодаря за отделеното време. Аз грешно предположих,че двете числа задължително ще са от различен тип понеже има изход по-голям и по-малък тип.
Задавам променлива 0 в началото да брои overflows. 
В случая, когато първото число е по-голямо и е ulong изобщо не правя проверка при която второто също е ulong - имам само иф - елсове за второ число за uint,ushort and byte,няма дефолт else изход и не изчислява нищо за оверфлоу и каунта си остава направо 0,както съм го задал в началото...

Но затова се сетих,едва ти като ми каза :D

Tест има за ulong само,но при всички варианти ,при които и двете числа са от един тип при мен оверфлоът ще е 0 вместо един....
 

0
18/06/2017 01:10:52
icowwww avatar icowwww 980 Точки

Аз баш това го гледах в решението ти, накрая реших, че си се сетил добре да пренебрегнеш случаите , в които и двете са един вид тип число, защото си взима overflowCount = 0 и няма проблем(малко станно звучи хем да е в тоя тип, хем да го превърта). Е да ама ако си е баш на границата не е коректно, не бях ли тръгнал да търся какъв точно е инпута не знам къде щеше да му излезе края :Д

0
18/06/2017 01:33:32
stanislav.ib avatar stanislav.ib 4 Точки

A как разбираш какъв е инпутът :D

0
icowwww avatar icowwww 980 Точки

Направих случай ако първото число е ulong да влиза безкраен цикъл и по този начин джъдж да гръмне за памет или време. Същото и за второто число. Оказаха се и двете ulong и после ми стана ясно. Написах инпута с

максималната стойност на ulong и ми изкара 0. Пробвах да задам винаги да изкарва 1 overflow и се получи. Въпреки че това не е много коректно да изкарва 1 overflow, защото числото реално не е превъртяло типа, а е точно преди превъртането.

0
18/06/2017 01:44:50
stanislav.ib avatar stanislav.ib 4 Точки

Tака вече като е измислено звучи много лесно :)
Напред си с материала явно ,багодаря за помощта 

0
icowwww avatar icowwww 980 Точки

За нищо :)

0