Zliczanie powtórzeń cyfr w danej liczbie

0

Witam. Napisałem program, który zlicza ilość powtórzeń każdej cyfry w danej liczbie. Np. 151 składa się z 2 jedynek i 1 piątki. Poniżej zamieszczam kod.

#include <iostream>

using namespace std;

void zlicz(long liczba);

int main()
{
    long liczba;

    cout << "Wprowadz liczbe: ";
    cin >> liczba;

    zlicz(liczba);
}

void zlicz(long liczba)
{
    int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;    //liczniki dla kolejnych cyfr(0-9)

    if(liczba<0)
    {
        liczba=-liczba;
    }

    while(liczba!=0)
    {
        if(liczba%10==9)
        {
            j++;
        }
        if(liczba%10==8)
        {
            i++;
        }
        if(liczba%10==7)
        {
            h++;
        }
        if(liczba%10==6)
        {
            g++;
        }
        if(liczba%10==5)
        {
            f++;
        }
        if(liczba%10==4)
        {
            e++;
        }
        if(liczba%10==3)
        {
            d++;
        }
        if(liczba%10==2)
        {
            c++;
        }
        if(liczba%10==1)
        {
            b++;
        }
        if(liczba%10==0)
        {
            a++;
        }
        liczba=liczba/10;
    }
    cout << "Liczba ta sklada sie z: " << endl;
    cout << a << " zer" << endl
         << b << " jedynek" << endl
         << c << " dwojek" << endl
         << d << " trojek" << endl
         << e << " czworek" << endl
         << f << " piatek" << endl
         << g << " szostek" << endl
         << h << " siodemek" << endl
         << i << " osemek" << endl
         << j << " dziewiatek" << endl;
}

Chciałbym zapytać, czy ktoś mógłby przedstawić mi jakiś bardziej,hmm, "elegancki" sposób? :) Myślałem nad tablicami i pętlą, która zlicza powtórzenia każdej cyfry, ale nie wiedziałem, jak przerzucić to na C++. Pozdrawiam.

3

Coś w takim stylu:

unsigned int zliczenia[10];

while(liczba) {
    ++zliczenia[liczba % 10];
    liczba /= 10;
}

Liczba wystąpień cyfry zero będzie w zliczenia[0] itd.

0
Althorion napisał(a):

Coś w takim stylu:

unsigned int zliczenia[10];

while(liczba) {
    ++zliczenia[liczba % 10];
    liczba /= 10;
}

Liczba wystąpień cyfry zero będzie w zliczenia[0] itd.

Korzystając z Twojego kodu, program podaje mi losowe liczby jako ich wystąpienia. Próbowałem zobaczyć, co jest nie tak,ale nadal nie mogę na to wpaść. Ale dzięki za naprowadzenie. :)

3

Brakuje inicjalizacji tablicy na zero.

2

Tablice są inicjalizowane zerami tylko gdy są globalne, jak to masz w osobnej funkcji to musisz ręcznie zerować (najlepiej unsigned int zliczenia[10] = {0};). Ten szczegół pominąłem dla zwięzłości kodu, jak widać niesłusznie.

0
Patryk27 napisał(a):

Brakuje inicjalizacji tablicy na zero.

Rzeczywiście, wyleciało mi to z głowy. Dziękuję za pomoc! :)

1

Przeglądnij cały temat:
https://www.matematyka.pl/417479.html

0
Grey_Ghoust napisał(a):

Przeglądnij cały temat:
https://www.matematyka.pl/417479.html

Z pewnością przeczytam, dzięki. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1