Ulamki Okresowe

0

Hej, mam do napisania program, ktory wykonuje rozne matematyczne obliczenia w pewnym momencie pojawia sie dzielenie w wyniku czego powstaja liczby wymierne jednak nie mamy je przedstawic w postaci ulamka zwklego tylko liczby okresowej tj 0,(3) zamist 1/3 i wlasnie z tym mam problem, jest moze w javie jakas klasa ktora rozwiazuje ten problem.
Myslalem, aby dzielenie wpisac do Stringa np dlugosci 50 znakow i za pomoca wyrazen regularnych szukac powtorzen ale ciezko mi idzie skonstruowanie takiego wyrazenia , w najgorszym wypadku szukanie mozolne po tym stringu ale to tez srednio fajne jak okres bedzie wiekszy ;< rzucilby ktos jakims ciekawym pomyslem aby rozwiac ten problem bo na razie w internecie nie napotkalem na nic ciekawego, albo jakis algorytm najlepiej przydalaby sie jakas fajna klasa ;D?

1

Klasy jako takiej nie ma. W tym zadaniu chodzi nie tyle co o szukanie ułamka okresowego co o umiejętność zastosowania narzędzi do analizy ciągu znaków w celu wykrywania powtórzeń. W sumie jedynym rozsądnym wyjściem jest w tym przypadku ręczne szukanie dopasowania.
Sama metoda nie jest aż taka skomplikowana ponieważ wystarczy zbudować sobie odpowiedni "słownik" złożony ze znaków po przecinku i poszukać powtórzeń.

1

było takie zadanie na spoju.
Ogólnie to się robi tak, robiąc dzielenie po przekroczeniu przecinka zapamiętujesz kolejne reszty z dzielenia, jeśli znajdziesz powtórkę reszty z dzielenia to już znasz okres ułamka.

0

Wlasnie nie bardzo wiem gdzie znalezc cos o tych slownikach, probowalem szukac w algorytmach do analizy tekstu ale tam raczej skupiaja sie na szukaniu powtorzen na przykladzie wzorca, czy musialbym poczatek "pociac" i tymi algorytami szukac tych powtorzen?

Wlasnie wiem ze nalezy zapamietac, ale jak a jak sie trafi liczba np. 12324516789112245126789(123456789123456789) to zapamietywanie fragmecikow i porownywanie czy nastepne framenty sa takie same bedzie raczej klopotliwe jak okres pojawia sie dopiero na 23 indeksie ;<

a wyszukanie kolejnych dublikatow okreslonej liczby np kolejnego wystapienia 1 i sparwdzenie na Stringach tylko tego fragmentu od 1 do 1 i pozniej "symetrycznie" czy sa takie same ?

1

Nie wiem czy już poradziłeś sobie z zadaniem. Jeśli nie, to masz kod (implementacja pomysłu @MarekR22'a). Działa przy założeniu, że 0<licznik<mianownik.

        ArrayList<Integer> reszty = new ArrayList<Integer>();
        ArrayList<Integer> cyfry = new ArrayList<Integer>();
        int indeks = 0;
        reszty.add(10*licznik);
        cyfry.add(reszty.get(indeks) / mianownik);
        while(true)
        {
            int nowaReszta = 10*(reszty.get(indeks) % mianownik);
            int nowaCyfra = nowaReszta / mianownik;
            int i = reszty.indexOf(nowaReszta);
            if(i == -1)
            {
                reszty.add(nowaReszta);
                cyfry.add(nowaCyfra);
                indeks++;
            }
            else
            {
                StringBuilder sb = new StringBuilder("0,");
                for(int k=0;k<i;k++)
                {
                    sb.append(""+cyfry.get(k));
                }
                sb.append("(");
                for(int k=i;k<cyfry.size();k++)
                {
                    sb.append(""+cyfry.get(k));
                }                
                sb.append(")");
                System.out.println(sb);
                break;
            }
        }
0

Dzieki juz wlasnie poradzilem sobie z tym zadaniem tylko zrobilem to na tablicach ;)

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