class Converter { convert(digits, inputBase, outputBase) { // validate in/out bases if (inputBase < 2 || !Number.isInteger(inputBase)) { throw Error('Wrong input base') } if (outputBase < 2 || !Number.isInteger(outputBase)) { throw Error('Wrong output base') } // Validate digits. if (!digits.length || (digits[0] == 0 && digits.length != 1)) { throw Error('Input has wrong format'); } else if (digits[0] == 0 && digits.length == 1){ return digits; } // Convert to base 10 let sum = 0; let i = 0; while (digits.length > 0) { let d = digits.pop(); if (d >= inputBase || d < 0) { throw Error('Input has wrong format'); } sum += d * (inputBase ** i); i++; } // Convert to outputBase let output = []; while (sum > 0) { output.unshift(sum % outputBase); sum = Math.floor(sum / outputBase); } return output; } } export default Converter;