2017-02-19 1 views
0

J'ai un grand nombre par lequel je veux trouver le nombre d'occurrences d'un chiffre spécifié. Je me demande si utiliser un compteur fonctionnera. Mon code comme suit:trouver le nombre d'occurrences de chiffre spécifique avec un compteur en C++

#include <iostream> 
using namespace std; 

int main() 
{ 
int number; 
int n1; 
int n2; 
int n3; 
int n4; 
int n5; 
int n6; 
int n7; 
int n8; 
int n9; 
int n10; 
int digit; 
int digitCounter = 0; 


    cout << "Please enter a number between 100 to 2000000000." << endl; 
    cin >> number; 

    cout << "Please enter a digit that you want to find the number of occurances." << endl; 
    cin >> digit; 

    if (number > 0) 
    { 
    n1 = number % 10; 
    n2 = (number/10) % 10; 
    n3 = (number/100) % 10; 
    n4 = (number/1000) % 10; 
    n5 = (number/10000) % 10; 
    n6 = (number/100000) % 10; 
    n7 = (number/1000000) % 10; 
    n8 = (number/10000000) % 10; 
    n9 = (number/100000000) % 10; 
    n10 = (number/100000000) % 10; 

    if (n1 == digit) 
    { digitCounter++;} 

    else if (n2 == digit) 
    { digitCounter++;} 

    else if (n3 == digit) 
    { digitCounter++;} 

    else if (n4 == digit) 
    { digitCounter++;} 

    else if (n5 == digit) 
    { digitCounter++;} 

    else if (n6 == digit) 
    { digitCounter++;} 

    else if (n7 == digit) 
    { digitCounter++;} 

    else if (n8 == digit) 
    { digitCounter++;} 

    else if (n9 == digit) 
    { digitCounter++;} 

    else if (n10 == digit) 
    { digitCounter++;} 

    cout<< "The total number of occurances of " << digit << " in " << number <<" is "<<digitCounter<< endl; 

    } 
     else 

     cout<< "You have entered an invalid number."<<endl; 



system("pause"); 
return 0; 

} 

Cependant le compteur ne fonctionne pas. Quelqu'un peut-il conseiller ce qui humide mauvais? Toute aide est vraiment appréciée, merci.

+0

Pourquoi ne pas simplement convertir la chose à une chaîne et une boucle sur la chaîne? – Roope

+0

nous ne pouvons pas utiliser de chaîne pour ce faire, seulement peut utiliser mod. merci – herblackcat

Répondre

0

Votre Autre Si besoin d'être Si. À l'heure actuelle, vous ne passez en revue qu'une seule décision. Dès qu'il trouve un match, vous êtes sorti.

#include <iostream> 
using namespace std; 

int main() 
{ 
    int number; 
    int n1; 
    int n2; 
    int n3; 
    int n4; 
    int n5; 
    int n6; 
    int n7; 
    int n8; 
    int n9; 
    int n10; 
    int digit; 
    int digitCounter = 0; 


    cout << "Please enter a number between 100 to 2000000000." << endl; 
    cin >> number; 

    cout << "Please enter a digit that you want to find the number of occurances." << endl; 
    cin >> digit; 

    if (number > 0) 
    { 
     n1 = number % 10; 
     n2 = (number/10) % 10; 
     n3 = (number/100) % 10; 
     n4 = (number/1000) % 10; 
     n5 = (number/10000) % 10; 
     n6 = (number/100000) % 10; 
     n7 = (number/1000000) % 10; 
     n8 = (number/10000000) % 10; 
     n9 = (number/100000000) % 10; 
     n10 = (number/100000000) % 10; 

     if (n1 == digit) 
     { 
      digitCounter++; 
     } 

     if (n2 == digit) 
     { 
      digitCounter++; 
     } 

     if (n3 == digit) 
     { 
      digitCounter++; 
     } 

     if (n4 == digit) 
     { 
      digitCounter++; 
     } 

     if (n5 == digit) 
     { 
      digitCounter++; 
     } 

     if (n6 == digit) 
     { 
      digitCounter++; 
     } 

     if (n7 == digit) 
     { 
      digitCounter++; 
     } 

     if (n8 == digit) 
     { 
      digitCounter++; 
     } 

     if (n9 == digit) 
     { 
      digitCounter++; 
     } 

     if (n10 == digit) 
     { 
      digitCounter++; 
     } 

     cout << "The total number of occurances of " << digit << " in " << number << " is " << digitCounter << endl; 

    } 
    else 

     cout << "You have entered an invalid number." << endl; 



    system("pause"); 
    return 0; 

} 
+0

Il devrait y avoir seulement un si et une boucle – Slava

+0

Je suis d'accord, c'est une meilleure solution au problème. J'essayais juste de répondre à la question de ce qui n'allait pas avec la solution donnée. – BenG

0

Vous pouvez convertir votre numéro en une chaîne après que vous ayez recherché le chiffre dans la chaîne, c'est plus simple. Ou vous pouvez lire une chaîne de caractères (numéro) et un caractère (chiffres) puis vous faire comme ça:

char number[20], digit; 
int count = 0, i; 
printf("\nEnter a string : "); 
scanf("%s", &number); 

printf("\nEnter the character to be searched : "); 
scanf("%c", &digit); 

for (i = 0; number[i] != '\0'; i++) { 
    if (number[i] == digit) 
    count++; 
} 

if (count == 0) 
    printf("\nCharacter '%c'is not present", digit); 
else 
    printf("\nOccurence of character '%c' : %d", digit, count);` 
+0

Je doute que ce soit vraiment plus simple – Slava

0

essayer cette

#include <iostream> 

int main(int argc, char **argv) { 

    unsigned long long large(0); 

    int digitToFind(0); 

    std::cout << "enter a large number [100 to 2000000000]" << std::endl; 
    std::cin >> large; 

    if (large < 100 || large > 2000000000) { 
    std::cout << "invalid input." << std::endl; 
    return -1; 
    } 

    std::cout << "enter the digit to find" << std::endl; 
    std::cin >> digitToFind; 

    if (digitToFind < 0 || digitToFind > 9) { 
    std::cout << "invalid input." << std::endl; 
    return -1; 
    } 

    std::size_t counts[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 

    while (large > 0) { 
    int rem = large % 10; 

    counts[rem]++; 

    large /= 10; 
    } 

    std::cout << "number of occurrances of " << digitToFind << " is " 
      << counts[digitToFind] << std::endl; 

    std::cout << "press enter to continue" << std::endl; 
    std::cin.get(); 
    return 0; 
} 
0

Certains codes d'échantillons contiennent un autre défaut: si le nombre est petit alors nous obtenons plus de zéros que nécessaire ... nous ne pouvons pas supposer que le nombre est nécessairement grand. Cela fonctionne pour chaque numéro, en Python seulement parce que je suis plus habitué à Python pour le moment, il est facile de le convertir en C:

N = 1230533007 
digitToFind = 3 
digitCount = 0 

while N > 0: 
    d = N % 10 
    if d == digitToFind: 
     digitCount += 1 
    N //= 10 

print digitCount