Skip to content

Instantly share code, notes, and snippets.

@SeqviriouM
Last active January 31, 2017 15:53
Show Gist options
  • Save SeqviriouM/ef6054e5a4461fd12f9c7e9d93b038a8 to your computer and use it in GitHub Desktop.
Save SeqviriouM/ef6054e5a4461fd12f9c7e9d93b038a8 to your computer and use it in GitHub Desktop.
Division using only addition and subtraction
// Remainder of the division (Остаток от деления)
const b = (num1, num2) => {
const convertValues = (num1, num2) => {
let isNegative = false;
if (num1 < 0 && num2 < 0) {
num1 = -num1;
num2 = -num2;
} else if (num1 < 0) {
num1 = -num1;
isNegative = true;
} else if (num2 < 0) {
num2 = -num2;
isNegative = true;
}
return [num1, num2, isNegative];
}
let isNegative;
[num1, num2, isNegative] = convertValues(num1, num2);
let helpSum = num2;
while (num1 >= num2) {
while (num1 - helpSum >= 0) {
num1 = num1 - helpSum,
helpSum += helpSum;
}
helpSum = num2;
}
return isNegative ? -num1 : num1;
}
// Integer division (Целое от деления)
const c = (num1, num2) => {
const convertValues = (num1, num2) => {
let isNegative = false;
if (num1 < 0 && num2 < 0) {
num1 = num1 - num1 - num1;
num2 = num2 - num2 - num2;
} else if (num1 < 0) {
num1 = num1 - num1 - num1;
isNegative = true;
} else if (num2 < 0) {
num2 = num2 - num2 - num2;
isNegative = true;
}
return [num1, num2, isNegative];
}
let isNegative;
[num1, num2, isNegative] = convertValues(num1, num2);
let helpSum = num2;
let result = 0;
let x = 1;
while (num1 >= num2) {
while (num1 - helpSum >= 0) {
num1 = num1 - helpSum,
helpSum += helpSum;
result += x;
x += x;
}
helpSum = num2;
x = 1;
}
return isNegative ? -result : result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment