Veréis, he encontrado un código para averiguar qué números son capicúa y cuáles no cuando se introducen por teclado. Sin embargo, está hecho para que sólo pueda averiguar números de 3 cifras. Me gustaría que me ayudáseis a modificar el código para que pueda leer números de 4 cifras. ¿Qué debería cambiar? Aquí el código:
#include <iostream>
using namespace std;
int main()
{
int a;
char ca[100];
Ingres:
cout << "Digite un numero de 3 digitos: "; cin >> ca;
int lnumc = strlen(ca);
a = atoi(ca);
if (lnumc==3)
{
int n1 = a/100;
int n2 = a/10 - n1*10;
int n3 = a - (n1*100 + n2*10);
int ni = n3*100 + n2*10 + n1;
if (ni-a == 0)
cout << "El numero es capicua"<<endl;
else
cout << "El numero no es capicua"<<endl;
}
else
{
cout <<endl<< "El numero debe tener 3 digitos"<<endl;
goto Ingres;
}
cin.get();
cin.get();
return 0;
}
Aquí tienes uno de N dígitos
#include <stdio.h>
#include <string.h>
#define N 30
char num[N + 1]; // N dígitos máximo
int i, j, flag;
int main() {
printf("Número: ");
scanf("%s", num);
j = strlen(num) - 1;
flag = 1;
// Validar si es de un dígito
if(j == i)
flag = 0;
while(j > i)
if(num[i++] != num[j--]) {
flag = 0;
break;
}
if(flag)
printf("Es capicua\n");
else
printf("No es capicua\n");
return 0;
}
Perdona naderST, se me había olvidado mencionar que tenía que hacerlo con la librería iostream, nada de #include <stdio.h> o #include <string.h>.Gracias de todas formas.
A ver si alguien me puede echar un cable.
@suzy, simplemente sustituye printf's por cout's y poco mas.
@amchacon, un tip, a partir de C99 existe el tipo _Bool, no hace falta que uses un entero.
Pues me fastidiaste el código que te había preparado:
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main(){
int i;
char cad[100],cad1[100];
cout << "Digite un numero: "; cin >> cad;
for (i=0;i<cad[i]!='\0';i++)
cad1[(strlen (cad))-i-1]=cad[i];
cad1[(strlen (cad))]='\0';
if (strcmp(cad1, cad)!=0 || cad1[0]=='0')
cout << "El numero "<<atoi (cad1 )<<" no es capicua"<<endl ;
else
cout << "El numero "<<(cad ) <<" es capicua"<<endl;
cin.get();
return 0;
}
Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/SimpHomer.gif)
¿Por qué se tendría que sustituir todo eso para que sólo sea con la librería iostream? ¿Alguna ayudita?
Cita de: suzy en 10 Marzo 2013, 11:58 AM
¿Por qué se tendría que sustituir todo eso para que sólo sea con la librería iostream? ¿Alguna ayudita?
Difícil es, más no imposible.
Por ejemplo:#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string str,str2;
cout << "Introduce el numero: "; cin >> cad;
cin >> str;
str2 = str.substr(0, str.length());
reverse(str.begin(), str.end());
if(str2 == str)
cout << "El numero: "<<str2<<" es capicua." <<endl;
else
cout << "El numero: "<<str2<<" no es capicua.." <<endl;
return 0;
}
!Por dios!, si he usado algorithm y a lo mejor sólo es con iostream. UMMM. Pues por ejemplo así:#include<iostream>
using namespace std;
int main()
{
int numero0, numero1, numero2,numero_reves;
cout<<"Introduce el numero: ";
cin>>numero0;
numero1 = numero2 =numero0;
numero_reves = 0;
while( numero1 > numero_reves && numero2 > numero_reves )
{
numero_reves = 10 * numero_reves + numero1 % 10;
numero2=numero1;
numero1 /= 10;
}
if( numero1 == numero_reves || numero2 == numero_reves)
cout<<"Es capicua "<< numero0;
else
cout<<"No es capicua "<< numero0;
return 0;
}
Ahora creo que sí, sólo está iostream.Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/dancer2.gif)
Gracias leosansan!
Pero tengo dos problemillas:
Al ejecutar el programa se cierra Dev-C++. ¿Cómo puedo evitarlo?
Y lo segundo es más una duda que un problema. Mi profesor no nos ha enseñado a utilizar & y %. ¿Pará qué sirven? ¿Se podría sustituir por otra cosa más simple?
Gracias por vuestra ayuda.
Cita de: suzy en 10 Marzo 2013, 13:47 PM
Gracias leosansan!
Pero tengo dos problemillas:
Al ejecutar el programa se cierra Dev-C++. ¿Cómo puedo evitarlo?
Coloca cin.get( )antes del return. Y una cosa que no me canso de repetir, Dev-C está algo más que obsoleto, como el TurboC2.0. Desde que puedas consigue te el Code::Blocks que es libre y está actualizado hasta este año.Citar
Y lo segundo es más una duda que un problema. Mi profesor no nos ha enseñado a utilizar & y %. ¿Pará qué sirven? ¿Se podría sustituir por otra cosa más simple?
Son los operadores AND=&& y O=||, mientras que % calcula el resto de la división, es un operador más de casi cualquier lenguaje, como lo son el + - * /, así que vete acostumbrándote a él. En cambio & es para indicar la dirección y también se usa a nivel de operador de bits.
Cualquier otra duda no dudes en consultarla, bien por aquí o vía mp.
Saluditos!. .....(http://st.forocoches.com/foro/images/smilies/ciao.gif)
P.D: El segundo código de los dos últimos que te pase es "denso", por lo que es normal que te cueste. Ni te cuento lo que me costo a mí.(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Ya sé que Dev-C está obsoleto, pero con mi profesor sólo podemos usar este, que le vamos a hacer :-\
Por cierto, ha surgido otro problema, ahora no se me cierra al abrir el programa, pero sí se cierra cuando introduzco los números y le doy a enter.
¿A qué puede deberse?
Eso es exactamente lo que consigues con el cin.get(). Es para hacer una especie de pausa justo antes de que finalice el programa y por lo tanto no se te cierrre el dev-c++.
Cita de: suzy en 10 Marzo 2013, 14:27 PM
Ya sé que Dev-C está obsoleto, pero con mi profesor sólo podemos usar este, que le vamos a hacer :-\
Por cierto, ha surgido otro problema, ahora no se me cierra al abrir el programa, pero sí se cierra cuando introduzco los números y le doy a enter.
¿A qué puede deberse?
Y como puede saber cual tienes? Le pasas el .c, el exe y tirando *_*
Pasanos el código actual, puede que no hayas puesto bien el cin.get()
Este es el código que llevo por ahora:
#include<iostream>
using namespace std;
int main()
{
int numero0, numero1, numero2,numero_reves;
cout<<"Introduce el numero: ";
cin>>numero0;
numero1 = numero2 =numero0;
numero_reves = 0;
while( numero1 > numero_reves && numero2 > numero_reves )
{
numero_reves = 10 * numero_reves + numero1 % 10;
numero2=numero1;
numero1 /= 10;
}
if( numero1 == numero_reves || numero2 == numero_reves)
cout<<"Es capicua "<< numero0;
else
cout<<"No es capicua "<< numero0;
cin.get( );
return 0;
}
Todo correcto, no se te debería cerrar al instante *_*
Prueba a ponerlo otro cin.get() xD
Gracias amchacon!
Efectivamente, le faltaba otro cin.get ( );
Cuando postees código procura elegir las etiquetas "GeSHi" la del C++, así el código sale "coloreado" y es más fácil de seguir.
Saluditos!. ...(http://smilies-gifs.com/emoticonos-grandes/44grandes.gif)
¡Chicos tengo una duda!
¿Cómo se haría para que si se introdujese un número mayor de cuatro cifras el programa me lo diga?
Una ayudita ;D
Cita de: suzy en 10 Marzo 2013, 18:56 PM
¡Chicos tengo una duda!
¿Cómo se haría para que si se introdujese un número mayor de cuatro cifras el programa me lo diga?
.............................
De forma simple, si sólo hay que comprobar que si tiene más de cuatro cifras:if (numero/10000.>=1)
cout<<"tiene mas de cuatro cifras<<endl;
Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Mmm... Me da error leosansan, ¿qué hay de mal aquí?
#include<iostream>
using namespace std;
int main()
{
int numero0, numero1, numero2,numero_reves;
cout<<"Introduce el numero: ";
cin>>numero0;
numero1 = numero2 =numero0;
numero_reves = 0;
while( numero1 > numero_reves && numero2 > numero_reves )
{
numero_reves = 10 * numero_reves + numero1 % 10;
numero2=numero1;
numero1 /= 10;
}
if( numero1 == numero_reves || numero2 == numero_reves)
cout<<"Es capicua "<< numero0;
else
cout<<"No es capicua "<< numero0;
{
if (numero/10000.>=1)
cout<<"tiene mas de cuatro cifras<<endl;
}
cin.get( );
cin.get( );
return 0;
}
Te faltan unas comillas en el último cout, el del if. Pero creo que tienes la intención de comprobar si el número introducido es de más de cuatro cifras con lo que la posición de la condición estaría al principio, así:
#include<iostream>
using namespace std;
int main()
{
int numero0, numero1, numero2,numero_reves;
cout<<"Introduce el numero: ";
cin>>numero0;
if (numero0/10000.>=1)
cout<<"tiene mas de cuatro cifras"<<endl;
// aqui la condicion que quieras poner como pedir otro
numero1 = numero2 =numero0;
numero_reves = 0;
while( numero1 > numero_reves && numero2 > numero_reves )
{
numero_reves = 10 * numero_reves + numero1 % 10;
numero2=numero1;
numero1 /= 10;
}
if( numero1 == numero_reves || numero2 == numero_reves)
cout<<"Es capicua "<< numero0;
else
cout<<"No es capicua "<< numero0;
{
}
cin.get( );
cin.get( );
return 0;
}
Saluditos!. ....(http://smilies-gifs.com/sorpresa/13sorpresa.gif)
Gracias leosansan!
¿Pero cómo se haría para que, al decirme que tiene más de cuatro cifras, no me diga si es capicúa o no?
Cita de: suzy en 10 Marzo 2013, 19:51 PM
Gracias leosansan!
¿Pero cómo se haría para que, al decirme que tiene más de cuatro cifras, no me diga si es capicúa o no?
Entiendo que si tiene más de cuatro cifras "pasas" de comprobar si es o no capicua. Con es premisa:#include<iostream>
using namespace std;
int main()
{
int numero0, numero1, numero2,numero_reves;
cout<<"Introduce el numero: ";
cin>>numero0;
if (numero0/10000.>=1){
cout<<"Tiene mas de cuatro cifras. Adios"<<endl;
reurn 1;
}
numero1 = numero2 =numero0;
numero_reves = 0;
while( numero1 > numero_reves && numero2 > numero_reves )
{
numero_reves = 10 * numero_reves + numero1 % 10;
numero2=numero1;
numero1 /= 10;
}
if( numero1 == numero_reves || numero2 == numero_reves)
cout<<"Es capicua "<< numero0;
else
cout<<"No es capicua "<< numero0;
{
}
cin.get( );
cin.get( );
return 0;
}
Saluditos, otra vez.....(http://i1280.photobucket.com/albums/a497/leosansan/th_thumbup_zps7a793f22.gif)
Cuando introduzco un número de más de cuatro cifras se me cierra el programa :-(
¿A qué se debe?
Cita de: suzy en 10 Marzo 2013, 21:50 PM
Cuando introduzco un número de más de cuatro cifras se me cierra el programa :-(
¿A qué se debe?
A que he puesto un return, ¿o querías hacer algo si es de más de cuatro cifras?. Porfi, explica mejor lo que quieres hacer.
Saluditos!. ...(http://i1280.photobucket.com/albums/a497/leosansan/48grandes_zps82b8e944.gif)
Perdona leosansan, ya lo he resuelto.
¡Muchas gracias por la ayuda!