• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lugh

Questão sobre o número de dígitos duma variável do tipo int

12 mensagens neste tópico

Boas!

Existe alguma função em C para determinar o numero de dígitos duma variável do tipo int?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmmm ... não directamente.

Mas podes imprimir a variável para um string e calcular o tamanho da string.

int num_digitos(int variavel) {
  char buf[100];
  int len;

  sprintf(buf, "%d", variavel);
  len = strlen(buf);
  if (variavel < 0) len--;
  return len;
}

Não testado

Edit: nova versão, sem strlen()

int num_digitos(int variavel) {
  char buf[100];
  int len;

  len = sprintf(buf, "%d", variavel);
  if (variavel < 0) len--;
  return len;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também podes fazer sucessivas divisões por 10 e contar o número de iterações até chegar a 0.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O número de dígitos é um valor fixo, dependente do tamanho do int na plataforma, se souberes o tamanho do int sabes logo quantos dígitos pode ter.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar a fórmula floor(log10(abs(x)))+1, para saberes quantos dígitos tem o valor x, que funcionará para qualquer x diferente de 0.

1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O número de dígitos é um valor fixo, dependente do tamanho do int na plataforma, se souberes o tamanho do int sabes logo quantos dígitos pode ter.

Só para indicar que isto foi a resposta parva de quem tinha acabado de acordar e não leu a pergunta como deve de ser....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar a fórmula floor(log10(abs(x)))+1, para saberes quantos dígitos tem o valor x, que funcionará para qualquer x diferente de 0.

Supondo que x é um int ... "qualquer x diferente de 0" e diferente de INT_MIN (*) ;)

(*) isto para máquinas onde os int's são representados com 2's complement.

Nestas máquinas abs(INT_MIN) == INT_MIN /* == -2147483648 */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oh Knitter, não foi assim tão descabido, eu também pensei que era isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também pensei que era isso Knitter...

Se fosse necessário bastaria aplicar a fórmula ao valor power(256,sizeof(int))-1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também pensei que era isso Knitter...

Se fosse necessário bastaria aplicar a fórmula ao valor power(256,sizeof(int))-1

O que pretendia era:

x = 12345678

x tem 8 dígitos

ou

y = 1234

y tem 4 digitas

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora