Sumar Dígitos de un Número.

2,957 views
Skip to first unread message

Jonathan Terrada

unread,
Nov 3, 2011, 7:43:28 AM11/3/11
to php...@googlegroups.com
Buenos días.

Alguien sabe si existe una función, que sume todos los dígitos de un número y llegue como resultado a un solo dígito ? Es decir, por ej. tengo el número 4861 -> 4+8+6+1=19 -> 1+9=10 ->1+0= 1
Mí número sería el 1.

Espero que se entienda.
Muchas gracias.

JT.

Jonathan Muszkat

unread,
Nov 3, 2011, 8:30:29 AM11/3/11
to php...@googlegroups.com
Hace una funcion recursiva... mientras que el strlen != 1 se va llamando... y con un for lo recorres...

Saludos!

2011/11/3 Jonathan Terrada <jonatha...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-arg+u...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-arg?hl=es.



--
Jonathan Ariel Muszkat
Gtalk: mus...@gmail.com
Celular: (011)15-4-399-6363
Linkedin: http://www.linkedin.com/in/musky
Twitter: @jonymusky
Blog: http://www.jonymusky.com.ar

Skype: jony.musky

The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. -- Steve Jobs

Santiago Rojo

unread,
Nov 3, 2011, 8:34:08 AM11/3/11
to php...@googlegroups.com
Hola, podrías probar con usar la función de resto. Así vas adquiriendo los dígitos y los vas sumando.

$numeroInicial = 123456;
 
$numero = $numeroInicial;
$sumatoria = 0;
 
do {
$digito = $numero % 10;
$sumatoria += $digito;
$numero = floor($numero / 10); // Le saco el ultimo dígito al numero
}
while ($numero != 0);
 
echo "La sumatoria de los digitos de $numeroInicial es: $sumatoria\n";

Espero te sirva.

Saludos.

2011/11/3 Jonathan Terrada <jonatha...@gmail.com>


JT.

--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-arg+u...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-arg?hl=es.

Adrian Ramiro

unread,
Nov 3, 2011, 8:53:40 AM11/3/11
to php...@googlegroups.com
<?php

$numero = "123456";

$suma = array_sum(str_split($numero));

echo $suma;

?>

2011/11/3 Santiago Rojo <tia...@gmail.com>



--
Adrian

Guillermo Arancio

unread,
Nov 3, 2011, 9:26:12 AM11/3/11
to php...@googlegroups.com
Alguien sabe si existe una función, que sume todos los dígitos de un número y llegue como resultado a un solo dígito ? Es decir, por ej. tengo el número 4861 -> 4+8+6+1=19 -> 1+9=10 ->1+0= 1
Mí número sería el 1.
 
Podrías usar una función recursiva que vaya sumando los dígitos hasta que solo quede un solo dígito;

<?php

$numero = '123456789'; // 45 // 9

function a($numero) {
  if(strlen($numero) > 1) {
    $resultado += a(array_sum(str_split($numero)));    
  } else {
    return $numero;
  }
  return $resultado;
}

echo a($numero);
echo '<br>';
echo $numero;
?>
 

!! Geniusprof

unread,
Nov 3, 2011, 8:08:38 AM11/3/11
to php...@googlegroups.com
Pues La Verdad No Se Si Existe La Funcion Pero Podes Jugar Creando Un Ciclo Y La Funcion Explode().



--

Cristian Tomatis

unread,
Nov 5, 2011, 4:49:38 PM11/5/11
to php...@googlegroups.com
algo asi puede andar...

<?php
        
        $numero = 1485;
        
        $total = array_sum(str_split($numero));
        
        var_dump($total);
        
        
        ?>

diego

unread,
Nov 5, 2011, 10:53:50 PM11/5/11
to php...@googlegroups.com
y diviendiendo y quedandote con la parte entera?

Joaquín Vicente

unread,
Nov 7, 2011, 11:20:16 PM11/7/11
to php...@googlegroups.com
$numero = 4861;
$respuesta = $numero % 9;
if ($respuesta == 0) {
    $respuesta = 9;
}
echo $respuesta;

Incluso en PHP 5.3 podrías hacer algo tan minimalista como:

$respuesta = ($numero % 9 ?: 9);

gustavo c

unread,
Nov 8, 2011, 9:02:01 AM11/8/11
to php...@googlegroups.com
Veamos
4+8+6+1= 19 -> 1+9 = 10 -> 1+0 = 1

No se de donde sacaron este ejercicio, pero es del estilo de los universitarios.
Yo usaría recursividad
Seudo código:
suma(n)
   if n<=9:
        Return n
   g = sumaNumerosDe(n)
   Return suma(g)

sumaNumerosDe(n) ya saben hacerlo mirando anteriores emails


--
gustavo c

Guillermo Arancio

unread,
Nov 9, 2011, 7:38:02 AM11/9/11
to php...@googlegroups.com
Hola, si vieron la respuesta de gustavo c, podran observar que el
codigo que propone, no es recursivo, ni complicado. Solo utilizó un
artificio matematico llamado raiz digital [1] lo que lo hace mas
rápido y ágil.

Al sumar todas las cifras de un número, y luego sumar todas las cifras
de la suma, y continuar así hasta lograr un número de una sola cifra,
lo que se obtiene es la raíz digital del número de partida. La raíz
digital de un número es igual al resto des su división por 9.

Saludos Guillermo Arancio

[1] http://www.oviedocorreo.es/personales/comecoco/soluciones/sadivina9.htm

gustavo c

unread,
Nov 9, 2011, 7:44:48 AM11/9/11
to php...@googlegroups.com
2011/11/9 Guillermo Arancio <quiene...@gmail.com>:

> Hola, si vieron la respuesta de gustavo c, podran observar que el
> codigo que propone, no es recursivo, ni complicado.

Muy buen aporte, pero aclaro que es recursivo, desde el punto de vista
de Cs. de Computación. Mirá el último return.
Dentro de la función, me vuelvo a llamar y salgo cuando se cumple
cierta condición.

MUy interesante el link de Guillermo

--
gustavo c

Santiago Rojo

unread,
Nov 9, 2011, 7:58:18 AM11/9/11
to php...@googlegroups.com
+1 a la solución propuesta por Joaquín Vicente.

Saludos

2011/11/8 Joaquín Vicente <joa...@gmail.com>


$respuesta = ($numero % 9 ?: 9);

Christian Musa

unread,
Nov 9, 2011, 8:27:18 AM11/9/11
to php...@googlegroups.com
@Guillermo Arancio, creo que te referias a la solucion propuesta por Joaquín, todas las demas respuestas o eran recursivas o daban un resultado que no era el esperado segun el pedido de Jonathan Terrada (hay que leer!!)

Es una pena tener que responder para pedirles que lean las respuestas anteriores.

La respuesta acertada (en mi opinion..) es la de Joaquín Vicent. A veces hay que pensar un poco antes de dispararle a un mosquito con un cañon (usar recursividad) ;)

Saludos,

Federico

unread,
Nov 9, 2011, 11:07:54 AM11/9/11
to php...@googlegroups.com
Coincido en que la mejor respuesta es la de Joaquín.

Solo la cambiaría para que funcione no solo con php 5.3 sino también con versiones anteriores.

$suma = ($numero % 9 ? $numero % 9 : 9);


2011/11/9 Christian Musa <christ...@gmail.com>

Guillermo Arancio

unread,
Nov 14, 2011, 7:05:03 AM11/14/11
to php...@googlegroups.com
@Guillermo Arancio, creo que te referias a la solucion propuesta por Joaquín, todas las demas respuestas o eran recursivas o daban un resultado que no era el esperado según el pedido de Jonathan Terrada (hay que leer!!)

Se me cruzaron los ojos !!!
Efectivamente tenes razón la respuesta a la que me refería era la de Joaquín Vicente <joa...@gmail.com>


Saludos Guillermo Arancio

Reply all
Reply to author
Forward
0 new messages