Número capicúa

On domingo, 21 de noviembre de 2010 0 comentarios

Número capicúa

Desarrollar un algoritmo o un programa que te de los n primeros numeros capicuas.

Yo para resolver este problema lo plantie de la siguiente manera, primero saber que es un numero capicua:


La palabra capicúa (en matemáticas, número palíndromo) se refiere a cualquier número que se lee igual de izquierda a derecha y de derecha a izquierda (Ejemplos: 212, 7.540.550.457). El término se origina en la expresión catalana cap i cua (cabeza y cola).

Un número palindrómico es un número simétrico escrito en cualquier base a tal que a1a2a3...|... a3a2a1.

Todos los números de base 10 con un dígito {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} son palindrómicos.

* Existen nueve números palindrómicos de dos dígitos:
{11, 22, 33, 44, 55, 66, 77, 88, 99}.

* Noventa de tres dígitos:
{101, 111, 121,..., 181, 191, 202, 212,..., 292, 303, 313,..., 898, 909, 919, 929,..., 979, 989, 999}

* Noventa con cuatro dígitos:
{1001, 1111, 1221, 1331, 1441, 1551, 1661, 1771, 1881, 1991,..., 9009, 9119, 9229, 9339, 9449, 9559, 9669, 9779, 9889, 9999},

* Novecientos de cinco dígitos:
{10001, 11011, 11111, 11211, 11311, 11411.123455,,,,
Ahora la solucion que a continuacion es algo tosca a mi gusto pero es la primera que se me vino a la mente. Lo que hago es primero obtener el numero de digitos del numero para lo cual eso strlen para ello capturo al numero como un string, y luego lo paso a un entero con atoi. y Luego invierto el numero de orden si era 12 sera ahora 21 o si era 1245 sera 5421.

Para realizar dicha funcion e creado una funcion extra que es la potencia de numero ya que no recordaba la funcion en el c asi que manos a la obra:


Código PHP:
int potencia(int baseint exponente)
{
    
int itemp=1;
    
    for(
i=0i<exponentei++)
       
temp temp*base;
       
    return 
temp;

Código PHP:
int Invertir(int numberint size)
{
     
int restemp1temp2=0;
     
int i,n;
     
     
size;
     
     for(
i=0i<ni++)
     {
        
res number%10;
        
temp2 temp2 res*potencia(10,size);
        
size size 1;
        
        
temp1 number/10;        
        
number temp1;        
     }
     
     return (
temp2+number);     

Esta primera parte que desarrolle me dice si el numero es capicua o no:

Código PHP:
#include 
#include 
#include 
int Invertir(int numberint size); int potencia(int baseint exponente);
int main()
{
    
char numero[100];
    
int numtamano,inv;
    
    
printf("Introducir un numero: ");
    
scanf("%s",&numero);
    
tamano strlen(numero);
    
printf("Tamaño: %d\n",tamano);
    
num atoi(numero);
    
printf("Numero: %d\n",num);
    
inv Invertir(numtamano-1);
    
printf("Numero Invertido: %d\n",inv);
    
    if(
num==inv)
      
printf("Es Capicua");
    else
      
printf("No es Capicua");
    return 
0;    
}
int Invertir(int numberint size)
{
     
int restemp1temp2=0;
     
int i,n;
     
     
size;
     
     for(
i=0i<ni++)
     {
        
res number%10;
        
temp2 temp2 res*potencia(10,size);
        
size size 1;
        
        
temp1 number/10;        
        
number temp1;        
     }
     
     return (
temp2+number);     
}
int potencia(int baseint exponente)
{
    
int itemp=1;
    
    for(
i=0i<exponentei++)
       
temp temp*base;
       
    return 
temp;
}

 






A continuacion para mostrar los n primeros numeros si son capicuas desarrollamos lo siguiente:


Código PHP:
#include 
#include 
#include 
int Invertir(int numberint size); int potencia(int baseint exponente); int capicua(int dato);
int main()
{    
    
int i=0j=0cant;
    
    
printf("Introducir la cantidad de capicuas: ");
    
scanf("%d",&cant);
    
    while(
j<cant)
    {
       
1;
       
       if(
capicua(i)==1)
       {
         
printf("%d\n",i);
         
1;
       }
    }
    
    return 
0
}
int capicua(int dato)
{
    
char numero[100];
    
int invtamano;
    
    
itoa(dato,numero,10);
    
tamano strlen(numero);
    
inv Invertir(datotamano-1);
    
    if(
dato==inv)
      return 
1;
    else
      return 
0;
           
}
int Invertir(int numberint size)
{
     
int restemp1temp2=0;
     
int i,n;
     
     
size;
     
     for(
i=0i<ni++)
     {
        
res number%10;
        
temp2 temp2 res*potencia(10,size);
        
size size 1;
        
        
temp1 number/10;        
        
number temp1;        
     }
     
     return (
temp2+number);     
}
int potencia(int baseint exponente)
{
    
int itemp=1;
    
    for(
i=0i<exponentei++)
       
temp temp*base;
       
    return 
temp;

0 comentarios:

Publicar un comentario