Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kabs

Quantidade de dígitos pares e ímpares?

Recommended Posts

Começei a estudar programação há 3 semanas e travei nessa questão:

Um programa que receba como entrada um numero inteiro N (1000 < N < 9999) em seguida imprima a quantidade de dígitos pares e ímpares que compões aquela numero, desprezando-se o zero.

 

Obs: onde tem < é menor ou igual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já iniciou a construção do seu algoritmo?

Em que parte ficou travado?

 

Cara como to vendo programação pela 1º vez na vida e to aprendendo com C to bem travadão mas aqui vai o codigo.

Tipo as funções que aprendi até agora foi if, else, switch-case

 

#include <stdio.h>
#include <stdlib.h>

int main()

{
    int num1[5], par[5],impar[5];
    //Entrada do numero de 4 digitos
    printf("Digite um numero entre 1000-9999:\n");
    scanf("%d", &num1);
    
    
    if(num1<1000 || num1>9999)  //Condição de existência
    {
        printf("Numero Invalido");
    }




    return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui tem uma discussão sobre como verificar a quantidade de dígitos em um número:

http://stackoverflow.com/questions/1847131/how-many-digits-in-this-base

 

Leia até o final, porque existem comentários que analisam as respostas anteriores. Um deles menciona a diferença de todas as soluções p/ ceil(log10(n)/log10(2)).

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>

int ckdig (int n, int* p, int* i)
{
    int d = 0;
    
    if(n < 0)   n = -n;
    *p = *i = 0;
    
    while(n)
    {
        if((n % 2) == 0)
            (*p)++;
        else
            (*i)++;

        n /= 10;
        d++;
    }
    return d;
}

int main (int argc, char** argv)
{
    int n, p, i, d;
    
    puts("Digite um número:");
    scanf("%d", &n);
    
    d = ckdig(n, &p, &i);
    
    printf("Dentre os %d dígitos, há %d pares e %d ímpares.\n", d, p, i);
    return 0;
}

 

Para saber apenas a quantidade de dígitos necessários numa conversão, use:

 

d = logx( n ) / logx( b )

 

 

Onde:
n é o número na base decimal, deverá ser arredondado;
b é a base do sistema de numeração, este para qual o número será convertido;
d é a quantidade de dígitos que serão necessários para representar n, no sistema de numeração de base b;
x pode ser qualquer número, ou seja, log10, log2, ln, etc.
Está formula vem do seguinte principio:
Como x = logb( n ) é equivalente a bx = n e sendo b a base do sistema de numeração de n, x representará a quantidade de digitos de n, veja:
log(255) = 2,40654018 ≅ 3, pois não há como existir 0,4 digito.
log2(1111 1111) = 7,994353437 ≅ 8
log16(FF) = 1,998588359 ≅ 2
Deveras não é prático usar log16 ou logx, para tornar mais prático o uso dos logaritimos, vamos usar a fórmula de mudança de base:
logb( x ) = loga( x ) / loga( b )
Então chegamos a fórmula:
d = logx( n ) / logx( b )
Por isto que é bom gostar de matemática!
Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correção:

 

#include <stdio.h>

int ckdig (int n, int* p, int* i)
{
    int d = 0;
    
    if(n < 0)   n = -n;
    *p = *i = 0;
    
    while(n)
    {
        if((n % 2) == 0)
            (*p)++;
        else
            (*i)++;

        n /= 10;
        d++;
    }
    return d;
}

int main (int argc, char** argv)
{
    int n, p, i, d;
    
    puts("Digite um número:");
    scanf("%d", &n);
    
    d = ckdig(n, &p, &i);
    
    printf("Dentre os %d dígitos, há %d pares e %d ímpares.\n", d, p, i);
    return 0;
}

 

Para saber apenas a quantidade de dígitos necessários numa conversão, use:

 

d = logx( n ) / logx( b )

 

 

Onde:
n é o número na base decimal, deverá ser arredondado;
b é a base do sistema de numeração, este para qual o número será convertido;
d é a quantidade de dígitos que serão necessários para representar n, no sistema de numeração de base b, deverá ser arredondado;
x pode ser qualquer número, ou seja, log10, log2, ln, etc.
Está formula vem do seguinte principio:
Como x = logb( n ) é equivalente a bx = n e sendo b a base do sistema de numeração de n, x representará a quantidade de digitos de n, veja:
log(255) = 2,40654018 ≅ 3, pois não há como existir 0,4 digito.
log2(1111 1111) = 7,994353437 ≅ 8
log16(FF) = 1,998588359 ≅ 2
Deveras não é prático usar log16 ou logx, para tornar mais prático o uso dos logaritimos, vamos usar a fórmula de mudança de base:
logb( x ) = loga( x ) / loga( b )
Então chegamos a fórmula:
d = logx( n ) / logx( b )
Por isto que é bom gostar de matemática!
Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites
/*
    Copyright 2013 Mateus G Pereira
    
    Licença: GNU GPL v3 ou maior
    http://www.gnu.org/licenses/gpl.html
*/

#include <stdio.h>

int ckdig (int n, int* p, int* i)
{
    int d = 0;
    
    if(n < 0)   n = -n;
    *p = *i = 0;
    
    while(n)
    {
        if((n % 2) != 0)
            (*i)++;
        else if((n % 10) != 0)
            (*p)++;

        n /= 10;
        d++;
    }
    return d;
}

inline int _abs (int n)
{
    return (n < 0) ? -n:n;
}

int digits (int val, int base)
{
    register int digs = 0, n;
    
    n = _abs(val);
    
    do
    {
        n /= base;
        digs++;
    }while(n);
    
    return digs;
}

int main (int argc, char** argv)
{
    int n, p, i, d;
    
    puts("Digite um número:");
    scanf("%d", &n);
    
    d = ckdig(n, &p, &i);
    
    printf("Dentre os %d dígitos, há %d pares e %d ímpares.\n", d, p, i);
    printf("Correto? %d = %d?\n", d, digits(n, 10));
    return 0;
}

 

Algumas correções no código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.