Ir ao conteúdo
  • Cadastre-se
Cristina2000

C Erro na lógica do programa

Recommended Posts

Boa noite. Olá  eu estou com problemas neste programa que diz se um determinado numero é palíndromo ou não.

 Dizemos que um número natural n é palíndromo (3) se 
    o 1º algarismo de n é igual ao seu último algarismo, 
    o 2º algarismo de n é igual ao penúltimo algarismo, 
    e assim sucessivamente.

Exemplos:

567765 e 32423 são palíndromos.

567675 não é palíndromo.

O programa que eu fiz está rodando bem para alguns números mas para outros não. Por exemplo os números  1111, 2222, 3333, 4444 dá a resposta correta que eles são palíndromos mas os numeros 5555, 6666, 7777, 8888 e 9999 dá a resposta que não são palíndromos. Estou confusa. Quem puder ajudar agradeço. abs

#include<stdio.h>
#include<stdio.h>
int main(){
    int n,num,num1,num2,num3,pot,cont=0,cont1,
    cont2=10,cont3=10,cont4=1,cont5=10,
    control;
    printf("Digite n\n");
    scanf("%d",&n);   
    num=n;
    while(num>10){
                  num1=num/10;                        //Procura o indice da potencia de 10 que está nas linhas 28 e 32
                  cont++;
                  num=num1;
                  }
                  cont1=cont;                         // indice da potencia de 10
                  control=cont+1;                                  
                  if(cont%2==0){                     //palindromos tem numeros pares de algarismos:Ex 568865 e palindromo 
                  printf("O numero %d nao e palindromo\n",n);                                     //  56865   nao e palindromo
                  system("pause");
                  exit(0);
                  }
                  pot=pow(10,cont);                                                
                  if(n/pot==n%cont2){           //compara o primeiro algarismo com o ultimo
                                     while(cont4<control/2){
                                                             cont--;    //compara o segundo algarismo com o penultimo                                  
                                                             pot=pow(10,cont);         //e assim por diante
                                                             num2=n/pot;                                     
                                                             cont2=cont2*10;
                                                             num3=n%cont2;                                     
                                                             if(num2%cont3==num3/cont5)
                                                             cont4++; 
                                                             else{
                                                             printf("O numero %d nao e palindromo\n",n);
                                                             system("pause");
                                                             exit(0);
                                                             }
                                                             cont5=cont5*10;                                                            
                                                             }                                                             
                                                             }
                   else{
                   printf("O numero %d nao e palindromo\n",n);
                   system("pause");
                   exit(0); 
                   }                                         
                                                             if(cont4==control/2)
                                                             printf("O numero %d e palindromo\n",n);
                                                             else
                                                             printf("O numero %d nao e palindromo\n",n);
                                     
    system("pause");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Palíndromos podem sim ter um número ímpar de algarismos, o próprio enunciado dá um exemplo 32423.

 

Você está fazendo de um modo muito complicado, o modo mais simples é simplesmente inverter todos os algarismos do número, gerando um número invertido, ou seja com os mesmos algarismos de trás para frente. E se o numero invertido for igual ao número original então o número é palíndromo.

 

123231 -> invertido = 132321 -> 123231 é diferente de 132321 logo não é palíndromo

32423 -> invertido = 32423 -> 32423 é igual a 32423 logo é palíndromo

Compartilhar este post


Link para o post
Compartilhar em outros sites
int capicua ( int n1 ) {
    int temp = n1;
    int n2 = 0;

    do
        n2 = n2 * 10 + temp % 10;

    while ( ( temp /= 10 ) > 0 );

    return ( n1 == n2 ? 1 : 0 );

}

Essa funçãozinha calculava o capicua >_<

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×