ayuda en calcular un programa

Iniciado por indict, 17 Octubre 2012, 17:25 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

Hola,
quiero crear un programa que yo dé un número n y calcule la suma de sus cifras.

Manualmente lo que debería hacer el programa es: Ej. el número 423

Dividiría el 423 entre 10, 423/10= 42 (Divisor) y 3 (Residuo), 42/10= 4(Divisor) y 2 (Residuo) y 4/10= 0 (Divisor) y 1 (Residuo), entonces en el programa se debería sumar todos los residuos es decir 3+2+1 y sumarle el último numerador 4 y restarle el último residuo 1.

((3+2+1)+(4))-1=9 Da el número de cifras de n.

Yo he echo esto, pero no me calcula exactamente lo que quiero, si me pudierais corregir estaría muy agradecido.  :rolleyes:

#include<iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int suma=0;
    while(n>0)
    {
              suma=(n%10);
              suma=(n%10)+n-1;
              n=n/10;}
    cout<<suma<<endl;
system ("PAUSE");
return 0;
}



rir3760

El problema con tu programa se debe a que en cada iteracion del bucle estas asignando un nuevo valor al acumulador (la variable "suma"). Cambia el bucle a:
Código (cpp) [Seleccionar]
int suma = 0;
do {
   suma += n % 10;
}while ((n /= 10) != 0);


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

indict

gracias rir3760 por tu ayuda :).

Ahora quiero hacer algo más simple, es calcular la suma de los residuos de un número entero dado. He echo esto pero no me lo calcula. Espero que veáis que le falta al programa.

#include<iostream>
using namespace std;

int main()
{
   int n;
   int mod, suma=0;
   cin>>n;
   while(n>0)
   {
             
             mod=n%10;
             suma=suma+mod;}
   cout<<suma<<endl;
system ("PAUSE");
return 0;
}

Stakewinner00

#3
la suma de los residuos de un numero dado? osea si te dan 4 pues el residuo de dividir 4 entre x?

indict

el residuo de 4 sería 1. El de 426 por ejemplo sería 6 + 2 + 1

Stakewinner00

Cita de: indict en 17 Octubre 2012, 22:06 PM
el residuo de 4 sería 1. El de 426 por ejemplo sería 6 + 2 + 1
pero eso depende de por k lo dividas
4%4=0
4%2=0

indict

así perdón, es dividido siempre entre 10, n/10.

rir3760

La suma de los residuos al dividir continuamente el numero por diez no es mas que ... la suma de los dígitos del numero.

Tu programa no funciona correctamente porque en el bucle no modificas la variable "n". Cámbialo a:
Código (cpp) [Seleccionar]
while (n > 0){
   suma += n % 10;
   n /= 10;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

indict