Retake 28.2.2016 3та задача
Здравейте! Забелязах че освен мен на доста от колегите не им минават последните 2 теста. Може ли някой да ми обясни как ги е решил?
Здравейте! Забелязах че освен мен на доста от колегите не им минават последните 2 теста. Може ли някой да ми обясни как ги е решил?
Проблема идва от потенциалната дължина на числата, които се получават и при преобразуването към десетична бройна система се получават много големи числа. Както каза колегата, решението е BigInteger. Но ако пишеш алгоритъма за преобразуване на ръка (както подходих и аз), ще имаш проблем при вдигането на степен с Math.Pow(), както предполагам си подходил. Начина за вдигане на BigInteger на степен без загуба става с вградения метод в класа BigInteger.Pow().
Ето едно примерно решение.
Аз писах на Java. При мен също не минаваха преди да сменя на BigInteger - input-а може да е доста дълъг(макс 150 букви) :)
Ето го джавешкото ми решение: http://pastebin.com/5V21zmA5
Имаше колеги които казаха че им е BigInteger но не е минавал.Възможно е друго да съм сгрешил
Колегите дето бяха с BigInteger и не им минаваше правеха следното:
"...(BigInteger)Math.Pow(5, ...);"
и какво се получава ... Максималния брой символи в стринга е 150, а най-дългия SoftUni numeral е 3 символа ...
В най-лошия случай имаш 5 на 50-та степен...
Метода Math.Pow() вдига 5 на 50-та степен което е число което дори не мога да изговоря... Превърта 1000 пъти типа, който Math.Pow() връща, а именно double, и чак тогава castva към BigInteger... съответно ти реално получаваш някакъв милиард.
Което не е правилно.
Като използваш BigInteger.Pow(); той си умножава BigInteger типа, като не превърта нищо.
Ето и на C# --> тук
Проблема като цяло е в това. че много хора не се сещаха за BigInteger. Също така в решението може да се види, че и самият multiplier също е BigInteger, за да не превърта и той. Няма друго към задачата. Елементарна е според мен.
Чак елементарна не знам, но вече съм се научила да тествам с максималните възможни стойности от Constraints и като видях,че ми излизат минусови числа се усетих за BigInteger-a.