Math with strings instead of integers

materials

#1

Здравейте,

Някой може ли да препоръча добър материал който да обяснява добри практики за калкулаций със strings вместо със integers?

Например: ‘2689600’ / ‘4100’ = '656

Аз уча JS и лимита за цифри е доста ограничен. Пробвах няколко задачи със BigInt() и нещо не работи като хората.

Днес провах да си направя сам моделите за умножение, деление, събиране и изваждане на 2 дълги числа във стринг. Проблемът е че са доста грознички и в някои ситуаций дават грешен отговор

Благодаря предварително!


#2

Здравей :slight_smile:

Има доста колеги, които учат JS в момента и вярвам, че не им се е налагало да пишат custom functions.
Сподели някои от проблемите и може би ще намерим по-добро решение… От личен опит, ако проблема не се оправя със смяна на типа, е възможно по-скоро да е нещо в логиката :wink:

Поздрави,
Диди


#3

Пробвай да си припомниш как се смяташе в първи клас. Понякога решението е просто, а не нещо свързано с функции или типове. :slight_smile:


#4

Здравей,

Поздравления за инициативността да работиш със стингове вместо с числа! Все пак смятам че е по-добре да използваш bigint. Може ли да споделиш какво там не работи като хората?

Поздрави,
Стелян


#5

Здравейте, @ stanislav.trifonov1 най-вероятно пита за задачата Kaspichan Numbers понеже там на последните 3 теста са подават числа които са 64 битови а на javascript типът Number е 53 битов и съответно задачата не може да се реши с него. Ползването на BigInt решава задачата, но judge връща грешен резултат IR. Така че решението на javascript е да се напишат къстъм функции за делене и модулно делене. Ето едно примерно решение https://pastebin.com/LU994fD7


#6

Здравей.
Може да ползваш външна библиотека.
Например тази - https://www.npmjs.com/package/big-integer
Последнaта версия на JS има bigint native, но judge не ползва последната версия.


#7

Здравейте,

@nikolayneykov92 BigInt решава задачата ако се ползва по правилен начин - числото не трябва да минава през native числов формат а директно да се parsе-не към BigInt.

Деленето на стрингове не е лека работа и не ви препоръчвам да задълбавате в това как се прави.

Стелян


#8

Здравейте,

Мерси много! Днес имам почивен ден и ще обърна внимание на работа с големи числа. Ще ви пиша дали е било успешно и кои съвети са помогнали.

Иначе, примерни задачи където ми минават само част от тестовете заради големи числа (или поне аз така си мисля) са : Kaspichan Numbers, N Factorial, Calculate Again, Calculate 3, Tribonnaci, Math Expression (тук може и аз да съм проблема), Odd Number.


#9

Здравейте, @stelyan_georgiev бихте ли ми показали как се парсва правилно с BigInt ето тук https://pastebin.com/ySBrxZ5W съм ползвал BigInt за да реша задачата Kaspichan Numbers и локално работи за големи числа, но judge не приема решението за вярно. Благодаря ви предварително.


#10

Здравйте,
@stelyan_georgiev , аз също получавам отговорите локално със BigInt() но в judge ми дава IR както при @nikolayneykov92.

Дори провах всички числа да са стринг преди да преминат към BigInt() но пак не стана. Ето моят опит: https://pastebin.com/5HbgxS8e

Благодаря предварително!


#11

Здравейте,

Понеже judge наистина не разбира от bigint още трябва да използвате външен такъв.
Използвайте ето този: https://github.com/peterolson/BigInteger.js/blob/master/BigInteger.min.js от това репозитори: https://github.com/peterolson/BigInteger.js/

Копирате реда код от min.js файла най-отгоре в програмата си и после submit с него. Прочетете readme за usage.

Вие правилно сте го използвали и не е във вас вината, извинете ме че и аз не зацепих веднага!

Поздрави,
Стелян.


#12

Супер. Сега и judge е доволен :smiley: и кода работи…


#13

Споделете и с колеги, че това е често срещана греда :slight_smile:


#14

Мерси много! Страхотно е че толкова мн хора со готови да помогнат във форума!

Със bigInt() минаха задачите Calculate 3, Calculate Again, Tribonacci и N Factorial

Обаче, имам проблем със Kaspichan Numbers. След като приложих bigInt() ми минават по-малко тестове отколкото когато работя само със интеграли. Предполагам имам логическа грешка но немога да я открия.

Някой може ли да ми погледне кода: https://pastebin.com/39uGsh5F


#15

Задачата минава с ulong и ексепшън за 0.