Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)

Iniciado por ¡Micronet!, 15 Noviembre 2010, 15:22 PM

0 Miembros y 3 Visitantes están viendo este tema.

Akai

El problema con el número que tu le has puesto, es que el 0031416 lo toma como un octal, es decir, un numero en base 8. (Por ejemplo, prueba con 00981 y el compilador debería avisarte de ello).

En principio la solución debería ser esto:

Código (cpp) [Seleccionar]
int main(){
int num;
int sum=0;
cin >> num;
while(num>0){
   sum+=num%10;
  // esto era para pruebas cout <<"suM:" <<sum<< endl;
   num=num/10;
  // esto era para pruebas cout << "num:" << num << endl;
}

cout << sum << endl;

return 0;}


El código lo que hace es, una vez le introduces el número (ahora si funciona con cifras como 0031416):
mientras num > 0
A sum le añade el resto de dividir entre 10 num (345%10 = 5) (Num aqui no se ha modificado)
Dividimos num entre 10 (345/10=34 (recordemos que estamos hablando de división de enteros))



¡Micronet!

Cita de: Akai en 15 Noviembre 2010, 19:28 PM
El problema con el número que tu le has puesto, es que el 0031416 lo toma como un octal, es decir, un numero en base 8. (Por ejemplo, prueba con 00981 y el compilador debería avisarte de ello).



hahahaha ya lo note y como le hago para que mne lo tome en base 10 :S?

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

Akai

Si lo introduces por teclado (por ejemplo) no da problema. El problema está en la forma que se declaran los enteros en C++:

Decimal: No empieza por 0 (para el literal 0 da igual la base).
Octal: Empiezan por 0. Ejemplo: 010 es como poner 8
Hexadecimal: Empiezan por 0x o por 0X.
Para los valores de 10 a 15 se utilizan las letras ABCDEF o también abcdef.

Entonces en el caso de que quieras trabajar con números del tipo 0xxxxx, lo tienes que introducir.

¡Micronet!

Cita de: Akai en 15 Noviembre 2010, 19:49 PM
Si lo introduces por teclado (por ejemplo) no da problema. El problema está en la forma que se declaran los enteros en C++:

Decimal: No empieza por 0 (para el literal 0 da igual la base).
Octal: Empiezan por 0. Ejemplo: 010 es como poner 8
Hexadecimal: Empiezan por 0x o por 0X.
Para los valores de 10 a 15 se utilizan las letras ABCDEF o también abcdef.

Entonces en el caso de que quieras trabajar con números del tipo 0xxxxx, lo tienes que introducir.





OhOhOHohO!!! muchas Gracias!!! akai! :) ^^
ahora a terminar lo que quiero conseguir xD jajaja :P

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

¡Micronet!

Disculpen una vez mas la molestia:

while (sum!=n){
sum=0; ex+=1; numero=ex;

if (ex==9999999 && numero==9999999){
ex=0; numero=1; cont+=1;
}

while(numero>0){
sum+=numero%10;
numero=numero/10;
}
cout<<ex<<" da el valor de:"<<sum<<endl;

cont+=1;

}



Estoy usando tu codigo akai.
Lo que estoy tratando de hacer es que. cuando mi numero llegue al 9999999 me regrese 0000000 (en este caso regresara 0), pero cuando llega al 9999999 le incrementa un 1 y no me regresa el 0... me podrian ayudar :S ¿? una vez mas  :-[

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

Akai

Código (cpp) [Seleccionar]
if (ex==9999999 && numero==9999999)

Para que entre en ese if, tanto ex como numero han de ser 9999999, los dos. No se exactamente qué tratas de hacer, pero creo que deberías revisar esa condición. Si lo que quieres es que ponga numero a 0 cuando alcance 9999999, para qué incluir en la condición a ex?

Debido a que no tengo el planteamiento completo de lo que intentas hacer, lo que te estoy comentando es un mero análisis de la condición de dicho if, cabe la posibilidad de que me equivoque

¡Micronet!

#16
Cita de: Akai en 15 Noviembre 2010, 20:57 PM
Código (cpp) [Seleccionar]
if (ex==9999999 && numero==9999999)


El planteamiento del problema es:

Un entero de 7 digitos... sin que pase a 8 digitos...
si el valor llega a 9999999 regresarlo al valor 0000000 si la suma no llega a tu valor indicado...

ejemplo si yo introdusco 105 (su suma me da 6) y aumento el numero para conseguir que la suma de sus valores me den 10.

Entonces un ejemplo de lo que quiero con la condicion es:

si me dan el numero de 9999999 y el numero que busco de la suma de sus valores me de 5... entonces lo regreso al valor 0000000 para que regrese otra vez al inicio y me de el numero.0000014 ...

Lh: No hagas doble post, utiliza el botón modificar.


while (sum!=n){

if (ex==9999999){
ex=0; cont+=1;
}

sum=0; ex+=1; numero=ex;



while(numero>0){
sum+=numero%10;
numero=numero/10;
}
cout<<ex<<" da el valor de: "<<sum<<endl;

cont+=1;

}



Listo ya lo encontre jejeje era solo cuestion de ordenamiento :) ya ya gracias akai =] ya te dejo de molestar... :) jejeje.

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

¡Micronet!

Cita de: Shell Root en 15 Noviembre 2010, 23:59 PM
Pero entonces, sería un ciclo infinito?


no porque termine hasta que la suma llegue al valor n. que se esta buscando

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"