Jump to content
lugh

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

Recommended Posts

lugh

Boas!

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

Obrigado.

Share this post


Link to post
Share on other sites
pmg

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;
}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

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

Boa ideia, Ferreira ;)

http://paste.portugal-a-programar.org/pastebin.php?show=3040


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knitter

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....

Share this post


Link to post
Share on other sites
pmg

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 */


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pedrosorio

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

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


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
lugh

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

:)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.