Skip to content

Commit b888548

Browse files
committed
algorithm: add HornerScheme algorithm
This algorithm allows to convert number from decimal number system to another one (from 2 to 10)
1 parent 1005207 commit b888548

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

Maths/HornerScheme.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* @function hornerScheme
3+
* @description Convert a number from decimal system to another (till decimal)
4+
* @param {Number} number Number to be converted
5+
* @param {Number} base Base of new number system
6+
* @returns {String} Converted Number
7+
* @see [HornerMethod](https://en.wikipedia.org/wiki/Horner%27s_method)
8+
* @example
9+
* const num1 = 125 // Needs to be converted to the binary number system
10+
* gornerScheme(num, 2); // ===> 1111101
11+
* @example
12+
* const num2 = 125 // Needs to be converted to the octal number system
13+
* gornerScheme(num, 8); // ===> 175
14+
*/
15+
const hornerScheme = (number, base) => {
16+
if (typeof number !== 'number' || typeof base !== 'number') {
17+
throw new Error('Input data must be numbers')
18+
}
19+
// Zero in any number system is zero
20+
if (number === 0) {
21+
return `${number}`
22+
}
23+
let absoluteValue = Math.abs(number)
24+
let convertedNumber = ''
25+
while (absoluteValue > 0) {
26+
// Every iteration last digit is taken away
27+
// and added to the previois one
28+
const lastDigit = absoluteValue % base
29+
convertedNumber = lastDigit + convertedNumber
30+
absoluteValue = Math.trunc(absoluteValue / base)
31+
}
32+
// Result is whether negative or positive,
33+
// depending on the original value
34+
const result = number < 0 ? `-${convertedNumber}` : convertedNumber
35+
return result
36+
}
37+
38+
export { hornerScheme }

0 commit comments

Comments
 (0)