Números capicúa

Iniciado por suzy, 9 Marzo 2013, 23:54 PM

0 Miembros y 1 Visitante están viendo este tema.

suzy

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;

}

naderST

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;
}

suzy

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.

0xDani

@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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

leosansan

Pues me fastidiaste el código que te había preparado:


Código (cpp) [Seleccionar]
#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!. ...

suzy

¿Por qué se tendría que sustituir todo eso para que sólo sea con la librería iostream? ¿Alguna ayudita?

leosansan

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:


Código (cpp) [Seleccionar]
#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í:

Código (cpp) [Seleccionar]
#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!. ...

suzy

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.

leosansan

#8
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!. .....


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í.

suzy

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?