Здравейте,
Някой може ли да препоръча добър материал който да обяснява добри практики за калкулаций със strings вместо със integers?
Например: ‘2689600’ / ‘4100’ = '656
Аз уча JS и лимита за цифри е доста ограничен. Пробвах няколко задачи със BigInt() и нещо не работи като хората.
Днес провах да си направя сам моделите за умножение, деление, събиране и изваждане на 2 дълги числа във стринг. Проблемът е че са доста грознички и в някои ситуаций дават грешен отговор
Благодаря предварително!
Здравей
Има доста колеги, които учат JS в момента и вярвам, че не им се е налагало да пишат custom functions.
Сподели някои от проблемите и може би ще намерим по-добро решение… От личен опит, ако проблема не се оправя със смяна на типа, е възможно по-скоро да е нещо в логиката
Поздрави,
Диди
Пробвай да си припомниш как се смяташе в първи клас. Понякога решението е просто, а не нещо свързано с функции или типове.
Здравей,
Поздравления за инициативността да работиш със стингове вместо с числа! Все пак смятам че е по-добре да използваш bigint. Може ли да споделиш какво там не работи като хората?
Поздрави,
Стелян
Здравейте, @ stanislav.trifonov1 най-вероятно пита за задачата Kaspichan Numbers понеже там на последните 3 теста са подават числа които са 64 битови а на javascript типът Number е 53 битов и съответно задачата не може да се реши с него. Ползването на BigInt решава задачата, но judge връща грешен резултат IR. Така че решението на javascript е да се напишат къстъм функции за делене и модулно делене. Ето едно примерно решение https://pastebin.com/LU994fD7
Здравей.
Може да ползваш външна библиотека.
Например тази - https://www.npmjs.com/package/big-integer
Последнaта версия на JS има bigint native, но judge не ползва последната версия.
Здравейте,
@nikolayneykov92 BigInt решава задачата ако се ползва по правилен начин - числото не трябва да минава през native числов формат а директно да се parsе-не към BigInt.
Деленето на стрингове не е лека работа и не ви препоръчвам да задълбавате в това как се прави.
Стелян
Здравейте,
Мерси много! Днес имам почивен ден и ще обърна внимание на работа с големи числа. Ще ви пиша дали е било успешно и кои съвети са помогнали.
Иначе, примерни задачи където ми минават само част от тестовете заради големи числа (или поне аз така си мисля) са : Kaspichan Numbers, N Factorial, Calculate Again, Calculate 3, Tribonnaci, Math Expression (тук може и аз да съм проблема), Odd Number.
1 Like
Здравейте, @stelyan_georgiev бихте ли ми показали как се парсва правилно с BigInt ето тук https://pastebin.com/ySBrxZ5W съм ползвал BigInt за да реша задачата Kaspichan Numbers и локално работи за големи числа, но judge не приема решението за вярно. Благодаря ви предварително.
Здравйте,
@stelyan_georgiev , аз също получавам отговорите локално със BigInt() но в judge ми дава IR както при @nikolayneykov92.
Дори провах всички числа да са стринг преди да преминат към BigInt() но пак не стана. Ето моят опит: https://pastebin.com/5HbgxS8e
Благодаря предварително!
Здравейте,
Понеже judge наистина не разбира от bigint още трябва да използвате външен такъв.
Използвайте ето този: https://github.com/peterolson/BigInteger.js/blob/master/BigInteger.min.js от това репозитори: https://github.com/peterolson/BigInteger.js/
Копирате реда код от min.js файла най-отгоре в програмата си и после submit с него. Прочетете readme за usage.
Вие правилно сте го използвали и не е във вас вината, извинете ме че и аз не зацепих веднага!
Поздрави,
Стелян.
3 Likes
Супер. Сега и judge е доволен и кода работи…
1 Like
Споделете и с колеги, че това е често срещана греда
1 Like
Мерси много! Страхотно е че толкова мн хора со готови да помогнат във форума!
Със bigInt() минаха задачите Calculate 3, Calculate Again, Tribonacci и N Factorial
Обаче, имам проблем със Kaspichan Numbers. След като приложих bigInt() ми минават по-малко тестове отколкото когато работя само със интеграли. Предполагам имам логическа грешка но немога да я открия.
Някой може ли да ми погледне кода: https://pastebin.com/39uGsh5F
Задачата минава с ulong и ексепшън за 0.