¿Cómo degradar un Numero en C?

Estoy tratando de hacer el siguiente algoritmo en C. Un algoritmo que acepte como entrada un numero, y despliegue la suma de cada uno de sus dígitos, hasta que se vaya degradando y quede en el un solo dígito, es decir: si mi intrudujera 99984562489, por citar un ejemplo, el agoritomo debe hacer lo siguiente:
9999845624892=83.. O sea, es la suma cada uno de sus digitos de 9+9+9+9+8+4+5+6+2+4+8+9+2=83. A los de mas resultados que haya obtenido, aplicar el mismo procedimiente, hasta llevarlo a un solo dígito. Como se ve mas abajo.
83=11("8+3")
11=2("1+1")
Esta seria la salida:
Lasuama de los dígitos de 9999845624892 es 83
La suama de los dígitos de 83 es 11
La suma de los dígitos de 11 es 2
Acá dejo el pseudocódigo:
===========================================================================
#include<stdio.h>
main()
{
    int i=0,ones=0,num,sum=0;
        char temp[15]; //Cantidad de digitos
    printf("Introducir el numero ");
    scanf("%i",&num);
        while (num != 0)
     {
       ones=num%10; //Aqui obtengo las cifras actulales
           temp=(char)(ones+48); //48=(int)'0';
          num=num/10; //Aca elimono las cifras actuales
           i++; //Obtengo la longitud del numero
       //printf("%i",ones);
       sum = sum + ones; //sumo cada ciffra
        if (num == 0)
        {
         Ones=sum; //Aca hago que ones tome el valor de la suma, para que vuelva a iterar sobre el resultado
         //printf("%i\n",sum);
         printf("%i",ones);
        }
      }
       printf("\n");
       //printf("%i\n",sum);
       printf("%i\n",sum);
}
Pero solo imprime el la suma del número introducido. ¿Dónde está mi falla? Cual otro método me recomendarías..

1 Respuesta

Respuesta
1
Cuando en el if(num==0) haces esto:
Ones=sum; //Aca hago que ones tome el valor de la suma, para que vuelva a iterar sobre el resultado
num sigue valiendo 0 entonces sale del while, tendrías que hacer que num = sum si sum > 9.
Si sum es mayor que 9 continuas interando usando el numero de la suma, si es menor que 10 ya has acabado.
Entiendo, ¿per podrías mostrarme en el ejemplo de como seria? Lo hice como me indicaste, pero la final solo me arroja un solo resultado, es decir, la suma del resultado de todas las iteraciones:
Introduje el 45284 y el reusultado fue 28 que seria la suma de
4+5+2+8+4 = 23
2+3 = 5
fue la suma total del resutado de las iteraciones (5+23)=28. Lo que quiero es que me desplique el resultado de esta manera:
La suma de los digitos 45284 = 23
La suma de los digitos 23 = 5
Disculpa los inconverintes
falta ademas de hacer lo anterior poner sum = 0;
falta esto:
if(sum>9)
 {
  num = sum;
  sum = 0;
}
P.D.:
La línea:
temp = (char)(ones+48);  
No es correcta ya que temp es un array o puntero y le asignas una dirección no correcta.
temp = (char)(ones+48);  
No es correcta ya que temp es un array o puntero y le asignas una dirección no correcta., Gracias, ya me había percatado. En lo demás, sigue igual, si hago sum=0, el resultado sigue siendo el mismo, es decir para laiteracion cuando hago esto
if(sum>9)
 {
  num = sum;
  sum = 0;
}
A mi me ha funcionado, he usado VS 2005 y con esto funciona:
int _tmain(int argc, _TCHAR* argv[])
{
  int i=0,ones=0,num,sum=0;
  char temp[15]; //Cantidad de digitos
  printf("Introducir el numero ");
  scanf("%i",&num);
  while (num != 0)
  {
    ones=num%10; //Aqui obtengo las cifras actulales
    //temp=(char)(ones+48); //48=(int)'0';
    num=num/10; //Aca elimono las cifras actuales
    i++; //Obtengo la longitud del numero
    //printf("%i",ones);
    sum = sum + ones; //sumo cada ciffra
    if (num == 0)
    {
      ones=sum; //Aca hago que ones tome el valor de la suma, para que vuelva a iterar   sobre el resultado
      //printf("%i\n",sum);
      printf("%i",ones);
      if (sum >9)
      {
        num=sum;
        sum = 0;
      }
    }
  }
  printf("\n");
  //printf("%i\n",sum);
  printf("%i\n",sum);
  return 0;
}

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas