'Function isSpecialNumber(n) doesn't give the desired result
function isSpecialNumber(n) {
let str = n.toString();
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) > 5) {
return 'NOT!!'
} else {
return 'Special!!';
}
}
}
console.log(
isSpecialNumber(144525),
isSpecialNumber(2),
isSpecialNumber(9),
isSpecialNumber(23),
isSpecialNumber(39)
)
How it have to work:
isSpecialNumber(2) === 'Special!!' 2 is a single digit in the interval [0:5].
isSpecialNumber(9) === 'NOT!!' 9 is a one-digit number, but it is not in the interval [0:5].
isSpecialNumber(23) === 'Special!!' All digits of the number 23 are in the interval [0:5].
isSpecialNumber(39) === 'NOT!!' The second digit (9) is not in the interval [0:5].
Solution 1:[1]
The only thing you need to do is put the return ¨Special¨ outside of the for. Like this:
function isSpecialNumber(n) {
let str = n.toString();
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) > 5) {
return "NOT!!";
}
}
return "Special!!"
}
Because in your solution if one of the numbers is smaller than 5 its returning "Special" and maybe the next one is not.
Solution 2:[2]
function isSpecialNumber(n) {
let str = n.toString();
let found = 'special';
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) > 5) {
found = 'NOT!!';
}
}
return found;
}
console.log(
isSpecialNumber(144525),
isSpecialNumber(2),
isSpecialNumber(9),
isSpecialNumber(23),
isSpecialNumber(39)
)
Solution 3:[3]
Try this, it's a little bit different but it should do the same:
function isSpecialNumber(n) {
// n.toString() turns the number into a string
// .split('') splits the string into an array
// .every loops through the items in an array and
// checks that all the elements return true for the function that
// passed as the parameter into the every function.
// .every doc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
const special = n.toString()
.split()
.every((digit) => parseInt(digit) < 5)
// You can also do this, which uses .some
// .some doc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
/*
const special = n.toString()
.split()
.some((digit) => parseInt(digit) > 5)
*/
// if all the digits are less than 5, then it's special
// and should return "Special!!"
// else, return "NOT!!"
return special ? "Special!!" : "NOT!!"
}
console.log(
isSpecialNumber(144525),
isSpecialNumber(2),
isSpecialNumber(9),
isSpecialNumber(23),
isSpecialNumber(39)
)
Solution 4:[4]
generally i think that the problem stands on the way you compare the supposed numbers. You are writing str.charAt(i) > 5 but i think you forgot that you turned the number into a string first , so you are comparing the ascii value of the character with the number which is not going to give the appropriate result. I suggest that you parse the character to integer first and the compare with 5. Example : parseInt(str.charAt(i)) > 5
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Grumpy |
| Solution 3 | Amats |
| Solution 4 | Devis Arapi |
