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:
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.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,,,,
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 base, int exponente)
{
int i, temp=1;
for(i=0; i<exponente; i++)
temp = temp*base;
return temp;
}
Código PHP:
int Invertir(int number, int size)
{
int res, temp1, temp2=0;
int i,n;
n = size;
for(i=0; i<n; i++)
{
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
int Invertir(int number, int size); int potencia(int base, int exponente);
#include
#include
int main()
{
char numero[100];
int num, tamano,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(num, tamano-1);
printf("Numero Invertido: %d\n",inv);
if(num==inv)
printf("Es Capicua");
else
printf("No es Capicua");
return 0;
}
int Invertir(int number, int size)
{
int res, temp1, temp2=0;
int i,n;
n = size;
for(i=0; i<n; i++)
{
res = number%10;
temp2 = temp2 + res*potencia(10,size);
size = size - 1;
temp1 = number/10;
number = temp1;
}
return (temp2+number);
}
int potencia(int base, int exponente)
{
int i, temp=1;
for(i=0; i<exponente; i++)
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 number, int size); int potencia(int base, int exponente); int capicua(int dato);
int main()
{
int i=0, j=0, cant;
printf("Introducir la cantidad de capicuas: ");
scanf("%d",&cant);
while(j<cant)
{
i = i + 1;
if(capicua(i)==1)
{
printf("%d\n",i);
j = j + 1;
}
}
return 0;
}
int capicua(int dato)
{
char numero[100];
int inv, tamano;
itoa(dato,numero,10);
tamano = strlen(numero);
inv = Invertir(dato, tamano-1);
if(dato==inv)
return 1;
else
return 0;
}
int Invertir(int number, int size)
{
int res, temp1, temp2=0;
int i,n;
n = size;
for(i=0; i<n; i++)
{
res = number%10;
temp2 = temp2 + res*potencia(10,size);
size = size - 1;
temp1 = number/10;
number = temp1;
}
return (temp2+number);
}
int potencia(int base, int exponente)
{
int i, temp=1;
for(i=0; i<exponente; i++)
temp = temp*base;
return temp;
}
0 comentarios:
Publicar un comentario