From aac17dd7ef56ab1a2c3cf97093681163a613b62a Mon Sep 17 00:00:00 2001 From: alex_p Date: Mon, 31 Oct 2022 12:46:50 +0300 Subject: [PATCH] algorithm: add IntToBase algo and a test for it --- Maths/IntToBase.js | 40 ++++++++++++++++++++++++++++++++++++ Maths/test/IntToBase.test.js | 25 ++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 Maths/IntToBase.js create mode 100644 Maths/test/IntToBase.test.js diff --git a/Maths/IntToBase.js b/Maths/IntToBase.js new file mode 100644 index 0000000000..6ec8a0bab0 --- /dev/null +++ b/Maths/IntToBase.js @@ -0,0 +1,40 @@ +/** + * @function intToBase + * @description Convert a number from decimal system to another (till decimal) + * @param {Number} number Number to be converted + * @param {Number} base Base of new number system + * @returns {String} Converted Number + * @see [HornerMethod](https://en.wikipedia.org/wiki/Horner%27s_method) + * @example + * const num1 = 125 // Needs to be converted to the binary number system + * gornerScheme(num, 2); // ===> 1111101 + * @example + * const num2 = 125 // Needs to be converted to the octal number system + * gornerScheme(num, 8); // ===> 175 + */ +const intToBase = (number, base) => { + if (typeof number !== 'number' || typeof base !== 'number') { + throw new Error('Input data must be numbers') + } + // Zero in any number system is zero + if (number === 0) { + return '0' + } + let absoluteValue = Math.abs(number) + let convertedNumber = '' + while (absoluteValue > 0) { + // Every iteration last digit is taken away + // and added to the previous one + const lastDigit = absoluteValue % base + convertedNumber = lastDigit + convertedNumber + absoluteValue = Math.trunc(absoluteValue / base) + } + // Result is whether negative or positive, + // depending on the original value + if (number < 0) { + convertedNumber = '-' + convertedNumber + } + return convertedNumber +} + +export { intToBase } diff --git a/Maths/test/IntToBase.test.js b/Maths/test/IntToBase.test.js new file mode 100644 index 0000000000..002dde6af8 --- /dev/null +++ b/Maths/test/IntToBase.test.js @@ -0,0 +1,25 @@ +import { intToBase } from '../intToBase' + +describe('Int to Base', () => { + test('Conversion to the binary system', () => { + expect(intToBase(210, 2)).toEqual('11010010') + expect(intToBase(-210, 2)).toEqual('-11010010') + }) + test('Conversion to the system with base 5', () => { + expect(intToBase(210, 5)).toEqual('1320') + expect(intToBase(-210, 5)).toEqual('-1320') + }) + test('Conversion to the octal system', () => { + expect(intToBase(210, 8)).toEqual('322') + expect(intToBase(-210, 8)).toEqual('-322') + }) + test('Output is 0', () => { + expect(intToBase(0, 8)).toEqual('0') + expect(intToBase(0, 8)).toEqual('0') + }) + test('Throwing an exception', () => { + expect(() => intToBase('string', 2)).toThrow() + expect(() => intToBase(10, 'base')).toThrow() + expect(() => intToBase(true, false)).toThrow() + }) +}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy