Sumar las posiciones par de una cifra

Iniciado por ciquee, 31 Marzo 2019, 00:35 AM

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

ciquee

Hola, necesito hacer un programa que sume las posiciones par (empezando por la derecha) de una cifra, por ejemplo de 54684738 sumaria 3+4+6+5=18, y no tengo ni idea de cómo hacerlo ya que no puedo utilizar cadenas, registros, vectores ni matrices. He conseguido hacerlo que sume las cifras pares, pero lo que necesito es que sume las cifras que ocupan las posiciones pares.

¿Alguna idea?
Se agradece mucho!
Saludos 

K-YreX

Te doy la idea para que le encuentres la utilidad. Hay una utilidad que se usa mucho cuando se trabaja con números de formas similares a esta que es:
Código (cpp) [Seleccionar]

int numero = 123456789;
int ultima_cifra = numero % 10; // 9
numero /= 10; // 12345678

Ahora puedes adaptar esta idea a tu necesidad.
Si te surge algún problema, envía tu código para que podamos ver dónde falla. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

ciquee

#2
Buenas!! Gracias de nuevo por tu respuesta!
Creo que lo he pillado, pero tengo problemas con el cout, si lo pongo dentro del bucle me da el resultado infinitas veces, mientras que si lo pongo después de este (que es donde debe ir) no me da ningún resultado, me deja escribir el numero pero se queda ahí...

Este es mi código, a ver si me ayudas a ver que tengo mal:


...
while (num>=0) {
ultima_cifra = num%10; // descarto la última cifra por ser lugar impar
num /=10; // y me queda el número sin la última cifra
ultima_cifra = num%10; // ahora la última cifra SI que ocupa un lugar par
suma_pares = suma_pares + ultima_cifra; // guardo la cifra de lugar par en suma_pares
num /=10;
}

cout<<"La suma de las cifras de las posiciones pares es: "<<suma_pares<<endl;

return 0;
}


K-YreX

Algo tan tonto como lo siguiente:

numero = 1234
numero(1234) >= 0? Si
    ultima_cifra = 4
    numero = 123
    ultima_cifra = 3
    suma += ultima_cifra // 3
    numero = 12
numero(12) >= 0? Si
    ultima_cifra = 2
    numero = 1
    ultima_cifra = 1
    suma += ultima_cifra // 4
    numero = 0
numero(0) >= 0? Si
    ultima_cifra = 0
    numero = 0
    ultima_cifra = 0
    suma += ultima_cifra // 4
    numero = 0
numero(0) >= 0? Si...


Creo que ya te has dado cuenta del problema no?? :rolleyes:
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

FalKorXXI

Hola. Y si pruebas a hacerlo así?

#include <iostream>
using namespace std;

void suma_pos_pares(int n, int& suma, int& contador){
    while(n != 0){
      if(contador%2 == 0)suma += n%10;
      n /= 10;
      ++contador;
    }
}

int main(){
    int n;
    int suma = 0;
    int contador = 1;
    cin >> n;
    suma_pos_pares(n, suma, contador);
    cout << suma << endl;
}


:D

K-YreX

Cita de: FalKorXXI en 31 Marzo 2019, 13:40 PM
Hola. Y si pruebas a hacerlo así?

#include <iostream>
using namespace std;

void suma_pos_pares(int n, int& suma, int& contador){
    while(n != 0){
      if(contador%2 == 0)suma += n%10;
      n /= 10;
      ++contador;
    }
}

int main(){
    int n;
    int suma = 0;
    int contador = 1;
    cin >> n;
    suma_pos_pares(n, suma, contador);
    cout << suma << endl;
}


:D

Coloca tu código entre etiquetas de código GeSHi :-X

Es una forma de simplificarlo pero en la función <suma_pos_pares()>, el último parámetro creo que sobra completamente (ya que además hacer uso de el puede dar a errores al ser pasado por referencia) y el segundo parámetro también lo quitaría y que devuelva la suma la propia función. Imagina que usas la función esa 3 veces y olvidas poner el contador a 1 y la suma a 0 antes de cada ejecución; la primera ejecución sería correcta pero las dos siguientes, no.
Además la idea del contador para coger solo las posiciones pares funciona bien cuando lo piensas pero complica un poco más el código.

Para sumar las posiciones pares de un número, ¿qué necesitas saber? El número. Suficiente. Entonces podemos dejarlo así:
Código (cpp) [Seleccionar]

int sumarPosicionesPares(int numero){
    int suma = 0;
    while(numero != 0){
        numero /= 10;
        suma += numero % 10;
        numero /= 10;
    }
    return suma;
}
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

ciquee

Muchas gracias Yrex! Vaya tontería (=0) jajaja

Y gracias también FalForkXXI pero aún no he dado esas funciones y no puedo usarlas!

Un saludo!