Write a function that adds two numbers. You should not use + or any arithmetic operators.
function sumTwoNumbers(numA: number, numB: number): number {
let binaryNumA = numberToBinary(numA);
let binaryNumB = numberToBinary(numB);
let binaryResult = sumTwoBinaryNumbers(binaryNumA, binaryNumB);
return binaryToNumber(binaryResult);
}
function numberToBinary(input: number): string {
return (input).toString(2);
}
function binaryToNumber(input: string): number {
return parseInt(input, 2);
}
function sumTwoBinaryNumbers(numA: string, numB: string): string {
let arrayLonger = (numA.length > numB.length ? numA : numB).split('').reverse();
let arrayShorter = (numA.length <= numB.length ? numA : numB).split('').reverse();
let arrayResult: string[] = [];
let carry = false;
arrayLonger.forEach((element, index) => {
if (!carry) {
if (element === '1' && arrayShorter[index] === '1') {
carry = true;
arrayResult.push('0');
} else if (element === '0' && (arrayShorter[index] === '0' || arrayShorter[index] === undefined)) {
arrayResult.push('0');
} else {
arrayResult.push('1');
}
} else {
if (element === '1' && arrayShorter[index] === '1') {
carry = true;
arrayResult.push('1');
} else if (element === '0' && (arrayShorter[index] === '0' || arrayShorter[index] === undefined)) {
arrayResult.push('1');
carry = false;
} else {
carry = true;
arrayResult.push('0');
}
}
});
if (carry) arrayResult.push('1');
return arrayResult.reverse().join("");
}