Link to home
Start Free TrialLog in
Avatar of juan field
juan field

asked on

how can i get a 4 at the second console.log?

function sumDigits(num) {
  var sNumber = num.toString();
  var acc = 0;
  for(var i = 0; i < sNumber.length; i ++){
    if(sNumber[0] === "-"){
     var negnumber = Number(sNumber[0] + sNumber[1]);
    }
   
    var posnumber = Number(sNumber[i]);
    acc += posnumber;
  }
  return acc;
}

console.log(sumDigits(1148));
console.log(sumDigits(-316)); //--> 4
Avatar of Pawan Kumar
Pawan Kumar
Flag of India image

Hi Juan,
Pls try this..

function sumDigits(num) {
    var sNumber = num.toString();
    var acc = 0;
    var i = 0;
    While(i < sNumber.length) {
        if (sNumber[i] === "-") {
            acc = Number(sNumber[2]) - Number(sNumber[1]);
            i = 3;
        } else {
            acc += Number(sNumber[i]);
            i = i + 1;
        }
    }
    return acc;
}

Open in new window

Avatar of Shaun Vermaak
Here is a working script. You can make it more elegant though
https://jsfiddle.net/svermaak/nn7pq5gn/1/
console.log(sumDigits(1148));
console.log(sumDigits(-316));

function sumDigits(num) {
  var sNumber = num.toString();
  var acc = 0;
  for(var i = 0; i < sNumber.length; i ++){   
    var number;
    if (sNumber.charAt(i) === "-")
    {
    i++;
    number = Number("-" + sNumber.charAt(i));
    }
    else
    {
    number = Number(sNumber.charAt(i));
    }
    acc += number;  
  }
  return acc;
}

Open in new window

Option using operator and operand stacks
<script>
function sumDigits(dig)
{
  var atorstack = [];
  var andstack = [];
  var n = dig.toString();
  for(var i = 0; i < n.length; i++) {
    if (n[i].match(/[\+-]/)) {
      atorstack.push(n[i]);
    }
    else {
      if (andstack.length == 0) {
        andstack.push(n[i]);
      }
      else {
        var op = atorstack.pop() || '+';
        var and = andstack.pop();
        var result = eval(n[i] + op + and);
        andstack.push(result);
      }
    }
  }
  var ator = atorstack.pop() || '';
  return parseInt(ator + andstack.pop());
}

console.log(sumDigits(-316));
console.log(sumDigits(-3+1-6));

</script>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Kim Walker
Kim Walker
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of juan field
juan field

ASKER

thank you
Hi Juan,
Can you please provide feedback for the solution i gave?

Thanks in advance.

Regards,
Pawan