Fundamentos:Solucións:Capicúa
De ASIRodeira
Escribir un programa que solicite por teclado un número e nos indique si é capicúa ou non. Recoméndase facer unha función que reciba como parámetro un número enteiro e que devolva 1 si ese número é capicúa e 0 si non o é.
Índice |
Solución de Xavi:
Pseudocódigo
FUNCION numDixitos
RECIBE: num: Número enteiro
DEVOLVE: O número de díxitos que ten num
c=1;
Mentras (num>9)
num=num/10
c=c+1
Fin-Mentras
Devolver c
Fin-numDixitos
FUNCION colleDixito
RECIBE: num: Número enteiro
pos: Posición contando dende a esquerda e dende 0
DEVOLVE: O díxito que ocupa a posición pos en num.
num=num/elevar(10,pos)
Voltar num%10
Fin-colleDixito
FUNCIÓN eCapicúa
RECIBE: num: Número enteiro
DEVOLVE: 1 si num é capicúa
0 si num non é capicúa.
pp=0 (principio do número)
pf=numDixitos(num)-1
pd=ColleDixito(num,pp)
ud=colleDixito(num,pf)
Mentras (pd==ud) e (pp<pf)
pp=pp+1;
pf=pf-1;
pd=ColleDixito(num,pp)
ud=colleDixito(num,pf)
Fin-Mentras
Si pd!=ud
voltar 0
SeNon
voltar 1
Fin-Si
Fin-eCapicua
Implementación en C
#include <stdio.h> #include <math.h> int numDixitos(int num) { int c=1; while(num>9) { num=num/10; c++; } return c; } int colleDixito(int num,int pos) { num=num/((int)pow(num,pos)); return (num%10); } int eCapicua(int num) { int pp,pf; int pd,ud; pp=0; pf=numDixitos(num)-1; pd=colleDixito(num,pp); ud=colleDixito(num,pf); while ((pd==ud) && (pp<pf)) { pp++; pf--; pd=colleDixito(num,pp); ud=colleDixito(num,pf); } if (pd!=ud) return 0; return 1; } void main(void) { int num; printf("Numero?: "); scanf("%d\n",&num); if (eCapicua(num)) printf("E capicúa\n"); else printf("NON é capicúa\n"); }
Solución de Boube:
Implementación en C
#include <string.h> #include <stdio.h> int capicua (char *cadea); int capicua (char *cadea) { int lonx; int c=0; lonx=strlen(cadea)-1; while ((c<lonx)&& (cadea[lonx]==cadea[c])) { c++; lonx--; } if (c<lonx) return 0; else return 1; } main () { char n[1000]; n[0]=0; printf ("Introduza un numero:"); scanf ("%s", n); if (capicua(n)) printf ("O numero e capicua\n"); else printf ("O numero non e capicua\n"); }



