Buenas,
tengo que hacer un programa en c++ que me diga los numeros capicua que se encuentran entre dos valores(n, m) y no se por donde empezar. He pensado en crear una accion que me diga si el numero es capicua y luego ir comprovando con un ciclo si lo son los numeros entre n, m.
Alguna ayuda?
Cita de: Sothu en 1 Noviembre 2015, 13:24 PM
He pensado en crear una accion que me diga si el numero es capicua y luego ir comprovando con un ciclo si lo son los numeros entre n, m.
Es correcto, ahora, empieza a desarrollarlo. Deja la función que comprueba si es capicua para el final, y no tendrás problema.
Como dato, te digo: el operador módulo (%), retorna el resto de una división. Así pues, 123456%10, retorna 6 (la primera cifra).
Puedes convertir el número a un arreglo de caracteres con este método, o puedes hacer como veas. Empieza, luego si tienes dudas, sigue preguntando por aquí.
De momento he intentado crear una accion que me devuelva el numero girado pero no me funciona, soy muy nuevo en la POO. Alguien podria decirme que falla aqui?
#include <iostream>
using namespace std;
int alReves (int numero)
{
while (numero != 0)
{
numero % 10;
numero = numero / 10;
}
return alReves();
}
int main()
{
int numero;
cout << "ENTRAR NUMERO:";
cin >> numero;
cout << alReves(numero);
}
Descríbe paso a paso que es lo que pretendes hacer en ese algoritmo.
Te voy a describir lo que hace la función:
Mientras que el número sea diferente de 0, lo divides entre 10.
Luego, tienes una línea errónea. Tratas de retornar "alReves()". Estás llamando a la función, sin pasarle ningún argumento.
La línea numero%10; no hace nada. Hace la operación y ya, pero no guarda el resultado en ningún lugar.
Te diría que te pases por aquí: minidosis.org (http://minidosis.org)
Lo de la operacion del numero ya veo que es un error, lo que no entiendo es lo que dices del return. ¿Despues de una accion no va siempre un return de la misma?
En el return retornas un valor. Poner la función implica llamar a la función.
Entonces debo hacer return numero; ?
Efectivamente. Sin embargo, el algoritmo es incorrecto. Cuando salga del bucle, numero será igual a 0, tenlo en cuenta.
Estoy perdido 100% xd
Plantea un algoritmo. Si logras poner un algoritmo en papel, luego pasarlo a programación es más fácil.
Como dice ivancea96, plantea el algoritmo en un papel y así te resultará todo más claro cuando lo pases a código ya que sabrá lo que tienes que hacer y no lo harás todo a "pegar" a ver si funciona.
Para invertir un número lo que tienes que hacer es tomar la última cifra, luego tienes que ir desplazándola para sumarle la siguiente, por lo que tienes que multiplicar por 10 y sumarle la siguiente, y así hasta que el valor del número a invertir sea cero.
Teniendo eso en mente, el código quedaría algo así:
#include <iostream>
int invertir(int n) {
int nInvertido = 0;
while(n != 0) {
nInvertido = (nInvertido * 10) + (n % 10);
n /= 10;
}
return nInvertido;
}
int main() {
int numero;
std::cout << "Introduzca numero: "; std::cin >> numero;
std::cout << "Numero invertido: " << invertir(numero);
std::cin.get();
return 0;
}