2017-02-19 67 views
0

У меня есть большое число, в котором я хочу найти количество встречных номеров указанной цифры. Интересно, работает ли счетчик. Мой код выглядит следующим образом:найти количество встречных чисел с цифрой с помощью счетчика в 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; 

} 

Однако счетчик не работает. Может ли кто-нибудь посоветовать, что мокрое неправильно? Любая помощь действительно ценится, спасибо.

+0

Почему бы не просто преобразовать вещь в строку и цикл по строка? – Roope

+0

Мы не можем использовать строку, чтобы сделать это, только можете использовать мод. спасибо – herblackcat

ответ

0

Ваше другое Если вам нужно быть, если есть. В настоящее время вы проходите только одно решение. Как только он найдет подходящий вам матч.

#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

Должен быть только один if и loop – Slava

+0

Я согласен, что это лучшее решение проблемы. Я просто пытался ответить на вопрос о том, что пошло не так с данным решением. – BenG

0

Вы можете указать свой номер в строку после того, как вы проведете цифру в строке, это проще. Или вы можете прочитать строку символов (число) и символы (цифры), а затем вы делаете так:

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

Я сомневаюсь, что это действительно проще – Slava

0

попробовать этот

#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

Некоторые из кодов образцов содержат еще один недостаток: если число мало, тогда мы получаем больше нулей, чем необходимо ... мы не можем предположить, что число обязательно велико. Это работает для каждого номера, в Python только потому, что я больше привык к Python в данный момент, это просто, чтобы преобразовать его в C:

N = 1230533007 
digitToFind = 3 
digitCount = 0 

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

print digitCount