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");
}
Ferramentas persoais