Jump to content
Fórum Script Brasil
  • 0

Comparar digitos iguais


brunoandrad
 Share

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
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
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  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.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...