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

Comparar digitos iguais


brunoandrad

Pergunta

Pessoal, estou tentando fazer o exercício abaixo, consegui fazer para 5 dígitos, mas eu gostaria de que ele fizesse o calculo para qualquer quantidade de dígitos.

Poderiam me indicar uma forma de fazer?

Escreva um programa em C que leia um inteiro, determine quantos dígitos são iguais a 7 e imprima esta informação.

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

int main()
{
    int num,a,b,c,d,e,cont=0;
    printf("\n\nNumeros iguais a 7!!!\n\n\n");

    printf("Digite um numero de 5 digitos: ");
    scanf("%d", &num);


    a = num/10000;
    if (a==7) cont++;

    b = (num%10000)/1000;
    if (b==7) cont++;

    c = (num%1000)/100;
    if (c==7) cont++;

    d = (num%100)/10;
    if (d==7) cont++;

    e = (num%10);
    if (e==7) cont++;

    printf("Quantidade de digitos iguais a 7: %d\n",cont);

    system("pause");
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Você esta tentando criar um algoritmo que pegue um valor, tipo 1797, e conte quantos são os números iguais a 7? tipo no caso de 1797 seriam 2?

Para o caso do meu exemplo seria melhor usar uma string, e compara-la com o símbolo '7' após.

Ex:

char numeros[10];
int cont=0, i=0;
gets(numeros); //função para pedir string
while (numeros[i] != '\0'){ //o '\0' significa um espaço em branco, a função gets adiciona ele
    if (numeros[i] == '7')
        cont++;
    i++;
}
printf("Numeros iguais a 7: %d/n", cont);

 

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui está uma forma -- note que o loop vai de "cima para baixo", de forma a ir modificando o número (teste_num), removendo a casa mais significativa a cada passo:

1234 -> vira 234 -> vira 34 -> vira 4. Sempre pega o dígito mais significativo do teste_num atual.
 

#include <stdio.h>
#include <math.h>

int main() {
    int num, teste_num; /* número a ser testado */
    int ordem_de_magnitude; /* ordem de magnitude do número num */
    int i;
    int quantidade = 0; /* quantidade de dígitos igual a 7 */

    printf("Digite um numero: ");
    scanf("%d", &num);

    ordem_de_magnitude = (int) log10(num);
    teste_num = num;
    for(i = ordem_de_magnitude; i >= 0; i--) {
        int digito = teste_num / pow(10, i);
        teste_num -= digito * pow(10, i);

        if(digito == 7) {
            quantidade++;
        }
    }

    printf("O número %d contém %d dígitos iguais a 7.\n", num, quantidade);

    return 0;
}

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

brunoandrad, ele só começa a contar errado quando estoura o limite que um int consegue armazenar -- converter para char sofreria do mesmo problema.

O número 777777777 contém 9 dígitos iguais a 7.

O número -812156815 contém 0 dígitos iguais a 7. (com 10 digitos 7)

O valor máximo de um inteiro (int) é 2.147.483.647 (daí vem a "restrição" dos 9 dígitos). Experimente trocar int para long long e veja o que acontece:

#include <stdio.h>
#include <math.h>

int main() {
    long long num, teste_num; /* número a ser testado */
    long long ordem_de_magnitude; /* ordem de magnitude do número num */
    int i;
    int quantidade = 0; /* quantidade de dígitos igual a 7 */

    printf("Digite um numero: ");
    scanf("%lld", &num);

    ordem_de_magnitude = (int) log10(num);
    teste_num = num;
    for(i = ordem_de_magnitude; i >= 0; i--) {
        long long multiplicador = pow(10, i);
        int digito = teste_num / multiplicador;
        teste_num -= digito * multiplicador;

        if (digito == 7) {
            quantidade++;
        }
    }

    printf("O número %lld contém %d dígitos iguais a 7.\n", num, quantidade);

    return 0;
}

Digite um numero: 7777777777777777777
O número 7777777777777777777 contém 19 dígitos iguais a 7.

long long consegue contar até 19 dígitos.

Abraços!

 

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...