Малко преди първия изпит по JavaScript в академията на Телерик, реших да си напиша един BigInteger за всеки случай, ако случайно ми се наложи да правя сметки с големи цели числа. Като цяло си припомних детските години, в които ни учеха да събираме, изваждаме и делим числа :), което ако трябва да съм честен се оказа не чак толкова тривиална задачка. 🙂
За имплементацията на моя BigInteger съм използвал представяне на числата под формата на масив от цифри. Не е най-ефективното решение предвид че за всяка цифра от 1 до 9 използвам число в JavaScript, което по принцип е в доста по-големи граници. Бих се пробвал като намеря време да направя нова имплементация, която вътрешно използва не масив от всички цифри, ами такъв от по-големи числа, така че да не се налага да заделям толкова излишна памет за едно многоцифрено число.
Въпреки тези недостатъци трябва да кажа, че все пак имплементацията работи доста бързо и поне аз след известно тестване не съм намерил някакви проблеми с бързодействието.
Ето линк към моя GitHub профил, където може да се свали имплементацията:
Към самия файл най-отгоре съм прикачил и кратка документация, обясняваща основните функционалности на обекта. Ето и един цитат към нея.
///This JS object was written by Deyan Yosifov.///BigInteger keeps an integer number with infinite number of digits.///It supports functions plus, minus and multiply which return another BigInteger object///Also has toString() and toNum functions in it.///for parsing long numbers from string use parseToBigInteger(str)///for parsing from small number use new BigInteger(num)///for parsing from array of digits use new BigInteger(array, hasMinusSign)
Мисля че след известно тестване съм изчистил всички бъгове и обекта работи напълно коректно, но все пак ако някой открие някакви такива бих се радвал да сподели. 🙂
Leave a Reply