Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda exercício Deitel


carlosleonardo.df

Pergunta

Preciso construir um programa que leia um inteiro e conta quantos algarismos deste mesmo número são 7.

No caso criei um programa, no entanto ele funciona, mas se meu número tiver mais de 9 dígitos a variável responsável pela contagem começa a passar valores errados...

porque?

Segue abaixo o código que escrevi...

Antes de tudo grato pela colaboração.

 

#include <stdio.h>

 

int main( void )

{

  int aux = 1;

  int contador = 1;

  int contadorDe7 = 0;

  int numero, numeroAux, valorAux;

  int contaDigitos = 0;

 

  printf( "\nInforme um número:" );

  scanf( "%d",&numero );

 

  // Caso seja um número de apenas um algarismo e ele seja 7...                                                                                               

  if ( numero == 7 )

    {

      printf( "\nApenas um dígito 7\n" );

    }

 

  // Caso número seja 0...                                                                                                                                    

  if ( numero == 0 )

    {

      printf( "\nNenhum dígito é zero\n" );

    }

 

  // Variável auxiliar para que a original não seja alterada...                                                                                               

  numeroAux = numero;

 

  // Processo para ver quantos algarismos(dígitos) o número possui...                                                                                         

  while( numeroAux != 0 )

    {

      contaDigitos++;

      numeroAux /= 10;

    }

 

  // Processo para criar uma variável com tamanho suficiente para ser utilizada na hora da utilização de resto e divisão para apanhar os algarismos...        

  while ( contador < contaDigitos )

    {

      aux *= 10;

      contador++;

    }

 

  // Processo de contagem de quantos algarismos 7 possui no número...                                                                                         

  while ( contaDigitos != 0 )

    {

      valorAux = numero / aux;

      if ( valorAux == 7 )

        {

          contadorDe7++;

        }

      numero = numero % aux;

      aux /= 10;

      contaDigitos--;

    }

 

  // Informando o resultado...                                                                                                                                

  printf( "\n%d algarismos são 7\n\n", contadorDe7 );

 

  return 0;

}

 

 
Editado por carlosleonardo.df
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
29 minutos atrás, carlosleonardo.df disse:

Mano, isso acontece porque a variável que foi designada para armazenar o numero digitado é do tipo int. E o maior valor que esse tipo por armazenar é 4.294.967.295 (Isso combinando os modificadores de tipo unsigned long). Como qualquer número que tenha mais de nove algarismos 7's ultrapassa esse valor (7.777.777.777, por exemplo), você não poderá atribuir um valor com mais de 9 algarismos 7's a essa variável (pois, como já falei, o valor máximo que esse tipo pode guardar é 4.294.976.925). Caso você atribua um valor maior que este, ocorrerá um erro e o valor passado para a variável será um valor totalmente aleatório. Ocasionando, assim, um número x de algarismos 7's.

 

Bom, espero que eu tenha ajudado!

 

Editado por emanoel.lucas.3920
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...