Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ¡Micronet! en 15 Noviembre 2010, 15:22 pm



Título: Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
Publicado por: ¡Micronet! en 15 Noviembre 2010, 15:22 pm
Citar
Supongamos que tengo 7 digitos, de esos 7 digitos me tiene que dar la suma del numero 30.

Yo ingreso el valor de 0031416, este valor sumando sus numeros me da el valor de 15.

Entonces tengo que sumarle un numero y volver a sumar ese numero. si mi numero llega al numero 9999999...y no me da el numero deceado regresarlo al numero 0000000.

Y saber cuantos numeros se le incrementa a 0031416 para que llegue al valor 30 en este ejemplo.


Mi pregunta es... como hago que un Int... sume sus valores 1 por uno...¿? y mantenerlo como int.

Ya que no encontre una manera facil de hacerlo... yo lo que utilice fue un vector

int V[0,0,3,1,4,1,6].... pero se me hace un codigo extenso con los excesos de if's que llego a utilizar.

Entonces esa es mi pregunta.


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: Castiblanco en 15 Noviembre 2010, 15:26 pm
Así como dices creas el vector y suponiendo que es de 7 entonces

Código
  1. int sumatoria=0;
  2.  
  3. for (int i=0; i<=7;i++)
  4. {
  5. sumatoria += V[i];
  6. }

Y listo suma todos los términos y el resultado lo deja en "sumatoria", eso fue lo que entendí no se si sea eso lo que quieres ^^

Saludos...


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: ¡Micronet! en 15 Noviembre 2010, 15:36 pm
Código
  1. int sumatoria=0;
  2.  
  3. for (int i=0; i<=7;i++)
  4. {
  5. sumatoria += V[i];
  6. }


Castiblanco de echo asi lo hice... pero no lo quiero tener como vector lo quiero como un int. para que se me haga mas facil. 

Lo quiero como int... sume sus valores y que me arroje su resultado pero mantener como int y no como un vector. :S


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: Castiblanco en 15 Noviembre 2010, 15:48 pm
No le veo sentido la verdad y no sabría como hacerlo de una manera más sencilla si es que se puede...


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: Akai en 15 Noviembre 2010, 16:49 pm
Lo que tu buscas es tener un numero de la forma siguiente:

378981 y sumarlo así? 3+7+8+9+8+1

Estoy muy espeso porque me acabo de levantar de dormir, pero vendría a ser algo así:

sum=0;
while(numero<0){
sum=numero%10;
numero=numero/10;
}




Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: ¡Micronet! en 15 Noviembre 2010, 18:36 pm
Lo que tu buscas es tener un numero de la forma siguiente:

378981 y sumarlo así? 3+7+8+9+8+1

Estoy muy espeso porque me acabo de levantar de dormir, pero vendría a ser algo así:

sum=0;
while(numero<0){
sum=numero%10;
numero=numero/10;
}

Acabo de ponerlo en practica ese ciclo. pero me deja el 0 cuando imprimo sum.
:S

(y si asi quiero sumarlo)...

porque use el numero 0031416... y no me efectua nada. ya que no es menor que 0 ... y si le cambio a mayor que 0 :S me hace un break... :S


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: xassiz~ en 15 Noviembre 2010, 18:47 pm
Es que si puede introducir ceros creo que los vas a tener que meter en un array de int obligatoriamente.


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: Akai en 15 Noviembre 2010, 18:48 pm
Fallo mio
dentro del bucle cámbialo por esto:

// tómese numero como el entero del que queremos sumar sus cifras
int sum=0;
while(numero>0){
sum+=numero%10;
numero=numero/10;
}



Ya comenté que andaba medio dormido.

Aunque introduzcas un numero como 0031416 si tu lo que quieres es sumarlo cifra a cifra, el bucle que te he puesto antes debería funcionar.


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: ¡Micronet! en 15 Noviembre 2010, 19:05 pm
// tómese numero como el entero del que queremos sumar sus cifras
int sum=0;
while(numero>0){
sum+=numero%10;
numero=numero/10;
}

(http://i288.photobucket.com/albums/ll194/SonidoAzul/Sinttulo-1.jpg)


Ve como me sale ese codigo... :S podrias explicarmelo porfas :) esque checa lo que segun hago todo esto para hacer la suma... ha y la suma debe ser 15 :S

Código:
int vec[7]={0,0,3,1,4,1,6},ex[7]={0,0,0,0,0,0,0},sum=0,i;
for (i=0;i<7;i++){
sum+=vec[i];
}cout<<sum;
int cont=0;
while(sum!=33){
cont+=1;
if (vec[7]<9){
vec[7]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]<9){
vec[6]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]==9 && vec[5]<9){
vec[5]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]==9 && vec[5]==9 && vec[4]<9){
vec[4]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]==9 && vec[5]==9 && vec[4]==9 && vec[3]<9){
vec[3]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]==9 && vec[5]==9 && vec[4]==9 && vec[3]==9 && vec[2]<9){
vec[2]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]==9 && vec[5]==9 && vec[4]==9 && vec[3]==9 && vec[2]==9 && vec[1]<9){
vec[1]+=1;
cont+=1;
}
if (vec[7]==9 && vec[6]==9 && vec[5]==9 && vec[4]==9 && vec[3]==9 && vec[2]==9 && vec[1]==9){
vec[7]=0;
vec[6]=0;  
vec[5]=0;  
vec[4]=0;  
vec[3]=0;  
vec[2]=0;
vec[1]=0;
cont+=1;
}

sum=0;
for (i=0;i<7;i++){
sum+=vec[i];
}

}

Lo pongo para que se me haga valida la pregunta. :)
y esque si hago todo eso es una gran perdida de tiempo. :S jeje
y quisiera comprender tu codigo.
ya que veo que se hace un resultado mas factible que el mio :S



Bueno el codigo que puse es parte de lo que estoi haciendo...
en si el que suma solo es esto:

Código:
for (i=0;i<7;i++){
sum+=vec[i];
}


pero tu codigo hace mas elegante el problema


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: [L]ord [R]NA en 15 Noviembre 2010, 19:26 pm
Eso esta en los ejercicios de Projecteuler si no me equivoco.


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: 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).

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

Código
  1. int main(){
  2. int num;
  3. int sum=0;
  4. cin >> num;
  5. while(num>0){
  6.    sum+=num%10;
  7.   // esto era para pruebas cout <<"suM:" <<sum<< endl;
  8.    num=num/10;
  9.   // esto era para pruebas cout << "num:" << num << endl;
  10. }
  11.  
  12. cout << sum << endl;
  13.  
  14. 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))




Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: ¡Micronet! en 15 Noviembre 2010, 19:40 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?


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: 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.


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros
Publicado por: ¡Micronet! en 15 Noviembre 2010, 19:54 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


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
Publicado por: ¡Micronet! en 15 Noviembre 2010, 20:40 pm
Disculpen una vez mas la molestia:

Código:
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  :-[


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
Publicado por: Akai en 15 Noviembre 2010, 20:57 pm
Código
  1. 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


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
Publicado por: ¡Micronet! en 15 Noviembre 2010, 21:17 pm
Código
  1. 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.


Código
  1. while (sum!=n){
  2.  
  3. if (ex==9999999){
  4. ex=0; cont+=1;
  5. }
  6.  
  7. sum=0; ex+=1; numero=ex;
  8.  
  9.  
  10.  
  11. while(numero>0){
  12. sum+=numero%10;
  13. numero=numero/10;
  14. }
  15. cout<<ex<<" da el valor de: "<<sum<<endl;
  16.  
  17. cont+=1;
  18.  
  19. }


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


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
Publicado por: Shell Root en 15 Noviembre 2010, 23:59 pm
Pero entonces, sería un ciclo infinito?


Título: Re: Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
Publicado por: ¡Micronet! en 16 Noviembre 2010, 00:26 am
Pero entonces, sería un ciclo infinito?


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