const errorHandling = require('../../utils/errorHandling') const { requiredFields } = require('../../config/errors') const formatNumberResult = require('../secondary/formatNumberResult') /** * @description Vérifie si un nombre fait partie des nombres d'Armstrong. * @param {Number} number - Le nombre à tester * @returns {Object} Un objet contenant l'explication en html et le booléen si oui ou non c'est un nombre d'armstrong * @examples armstrongNumber(153) → 153 est un nombre d'Armstrong, car 13 + 53 + 33 = 153. */ function armstrongNumber (number) { const numberString = number.toString() const numberStringLength = numberString.length let result = 0 let resultString = '' for (let index = 0; index < numberStringLength; index++) { result = result + parseInt(numberString[index]) ** numberStringLength resultString = resultString + ' + ' + numberString[index] + '' + numberStringLength + '' } const formattedNumber = formatNumberResult(number) const isArmstrongNumber = result === number return { isArmstrongNumber, resultHTML: `

${formattedNumber} ${ isArmstrongNumber ? 'est' : "n'est pas" } un nombre d'Armstrong, car ${resultString.slice( 2 )} = ${formatNumberResult(result)}.

` } } /* OUTPUTS */ module.exports = ({ res, next }, argsObject) => { let { number } = argsObject // S'il n'y a pas les champs obligatoire if (!number) { return errorHandling(next, requiredFields) } // Si ce n'est pas un nombre number = parseInt(number) if (isNaN(number) || number <= 0) { return errorHandling(next, { message: 'Veuillez rentré un nombre valide.', statusCode: 400 }) } return res.status(200).json(armstrongNumber(number)) }