Sumar dígitos de un string

Lo que quiero es que si el número introducido por el usuario tiene más de un dígito, dichos dígitos se sumen, y que devuelva siempre una sola cifra.

Por ejemplo, si el usuario introduce 14, devuelva 5.

Otro ejemplo es que si el usuario escribe 87, la suma debe ser 15 pero debe volver a sumarse y el resultado final sería 6.

var numero=prompt("introduzca un número");

if(numero>=10){

}

else{
  alert(numero);
}
2
задан 17.03.2016, 16:17
6 ответов

Основанный на мой ответ на предыдущий вопрос :

    var numero = parseInt(prompt("introduzca un número"));
    while (numero >= 10) {
        numero = numero.toString()
            .split('')
            .map(x => parseInt(x) )
            .reduce( (x, y) => x + y);
    }
    alert(numero);
4
ответ дан 24.11.2019, 14:53
  • 1
    Luiggi, я буду помещать тебе памятник, much и # 237; пропасти спасибо. – Nian_cat 12.02.2016, 19:59
  • 2
    Ничего @Nian_cat –  12.02.2016, 20:00
  • 3
    GESPER и LEANDRO, ваши ответы TAMBI и # 201; N они ПРАВИЛЬНЫ. и #161; Большое спасибо всем! – Nian_cat 12.02.2016, 20:00

Идея состоит в том, чтобы делать одну funciГіn перекурсивная, ответ @Leandro был хорошо направлен, но ему не хватало точек фиксируй.

var cadena = prompt("Introduzca un número");
var numero = parseInt(cadena);

//Llamamos a la función recursiva
reduce(numero);

function reduce(num){
  if(numero >= 10){

    var suma = 0;
    for (var c in cadena) 
  	  suma += parseInt(cadena[c]);
      
      if(suma.toString().length > 1){

        //Si sigue siendo de más de un dígito, reseteamos las variables e iniciamos de nuevo
        numero = suma;
        cadena = suma.toString();
        reduce(suma);
      }else{
        alert(suma);
      }
  }
  else{
    alert(numero);
  }    
}
3
ответ дан 24.11.2019, 14:53
var numero = prompt("introduzca un número");

if (numero >= 10) {
  var res = numero.split("");

  var arrayLength = res.length;
  numero = 0;
  for (var i = 0; i < arrayLength; i++) {
    var a = Number(res[i]);
    numero = numero + a;
  }
  alert(numero);
} else {
  alert(numero);
}

Это решает проблему складывания твоих чисел, но не решает тот факт, что ты всегда хотел ни одну цифру, например, если я размещаю 99, сумма закончилась бы 18.

1
ответ дан 24.11.2019, 14:53

PodrГ, - чтобы быть чем-то как это:

var cadena = prompt("introduzca un número");

var numero = parseInt(cadena);

if(numero >= 10){

  var suma = 0;
  for (var c in cadena) 
  	 suma += parseInt(cadena[c]);

  alert(suma);
}
else
{
  alert(numero);
}

, Если хотят, что это был один dГ-gito, только состоит cuestiГіn в том, чтобы использовать while:

var numero = parseInt(prompt("introduzca un número"));

if(numero >= 10){

 var suma = 0;
 
 do{

   suma = sumar(numero.toString());
   numero = suma;
     
 }while(suma >= 10);

  alert(suma);
}
else
{
  alert(numero);
}

function sumar(cadena){

  var suma = 0;
  for (var c in cadena) 
  	 suma += parseInt(cadena[c]);

  return suma;
}
1
ответ дан 24.11.2019, 14:53
  • 1
    Это не решает проблему, и #233; l хоти, чтобы конечный результат был всегда единственным числом. – Gepser 12.02.2016, 17:16
  • 2
    @Gepser, если, я это добавляю в комментарии, но техника - та же самая, только остается помещать блок, который складывает числа внутри while для того, чтобы он это повторил до тех пор, пока это не будет число цифры – Leandro Tuttini 12.02.2016, 17:51

Мой ответ направлен, чтобы делать parse числа в параметре и использовать возврат как только было получено число, чтобы получать сумму всех Ваших цифр.

function sumarDigitos(numero) {
    return numero == 0 ? numero : sumarDigitos(numero/10) + (numero%10);
}

var sumaNumero = parseInt(cadenaNumero);

Чтобы возвращать единственную цифру...

while (sumaNumero > 9) {
    sumaNumero = sumarDigitos(sumaNumero)
}

Чтобы получать цепь единственная цифра...

var sumaCadena = sumaNumero.toString();
0
ответ дан 24.11.2019, 14:53

Эта serГ - в форму, основанную на тебе cГіdigo оригинал:

var numero = prompt("Introduzca un número");
var valorIntroducido = parseInt(numero);

if(valorIntroducido >= 10){ //más de 2 digítos.
    var suma = 0;
    for (var i in numero){             
  	  suma += parseInt(numero[i]);     
   }
   alert("Resultado : " +suma);
}else{//1 digito
    alert("Resultado (1 digíto): " +valorIntroducido);
}    
0
ответ дан 24.11.2019, 14:53