• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Długi input w pythonie

+2 głosów
616 wizyt
pytanie zadane 11 listopada 2024 w Python przez MichaelM Gaduła (3,000 p.)
Cześć, potrzebuje pomocy z zadaniem. Sam algorytm działa mi bezbłędnie, niestety jeden z testów zakłada na wejściu liczbę n<=9*10^999999. Python nie obsługuje konwersji liczby string na int dla tak dużych wartości. Jak inaczej mogę to przekonwertować na int niż poprzez int(input())?
komentarz 11 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
Poszukaj biblioteki do dużych liczb, są takie które powinny to obsłużyć, chociaż ~milion cyfr to sporo :)

Co chcesz zrobić z tymi liczbami, jakie operacje?

Bo jeśli chcesz np. mnożyć to możesz operować na stringach bez konwersji - zastosuj Algorytm Karatsuba.

Dodawanie i odejmowanie też nie jest trudne.

Dzielenie może trochę kłopotów przysporzyć.
komentarz 11 listopada 2024 przez MichaelM Gaduła (3,000 p.)
Bibliotek żadnych nie mogę niestety używać. O stringach myślałem jako tych mniej optymalnych, poczytam o tym algorytmie szczerze nigdy o nim nie słyszałem.
komentarz 11 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
Musisz sam opracować własny algorytm dodawania, odejmowania, a do mnożenia polecam algorytm Karatsuba. Wtedy możesz działać na stringach.
2
komentarz 11 listopada 2024 przez adrian17 Mentor (355,180 p.)

Poszukaj biblioteki do dużych liczb, są takie które powinny to obsłużyć, chociaż ~milion cyfr to sporo :)

Python ma wbudowaną obsługę liczb całkowitych dowolnego rozmiaru (i rzeczywistych z `decimal`).

 a do mnożenia polecam algorytm Karatsuba

Karatsuba też już wewnętrznie używa do mnożenia.

No i co najważniejsze:

Python nie obsługuje konwersji liczby string na int dla tak dużych wartości

...u mnie działa bez problemu?

Mam plik z liczbą z 999999 cyframi, wczytuję go (zarówno z read() na pliku jak i input() na strumieniu) i int(tekst) działa - tylko trwa z 2-3s.

Możesz pokazać, co się u Ciebie dzieje?

komentarz 11 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
Sądziłem że jest limit co do liczby cyfr.
komentarz 11 listopada 2024 przez MichaelM Gaduła (3,000 p.)

@adrian17, po wklejeniu inputa otrzymuje:
Traceback (most recent call last):
  File "C:\Users\malec\Pulpit\Projekty\Olimpiada Informatyczna\2024\ZAM\zam.py", line 16, in <module>
    n = int(input())
        ^^^^^^^^^^^^
ValueError: Exceeds the limit (4300 digits) for integer string conversion: value has 1000000 digits; use sys.set_int_max_str_digits() to increase the limit

niestety nie mogę korzystać z biblioteki sys ani innych. Jednak lokalnie po zmianie limitu algorytm działa zwracając poprawny wynik, niestety przekracza limit czasu (3 sekundy) działając około minute.

komentarz 11 listopada 2024 przez adrian17 Mentor (355,180 p.)
To może musisz przemyśleć zadanie, bo z limitu czasu wynika że w ogóle nie powinieneś robić tego co próbujesz robić.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 1,147 wizyt
pytanie zadane 10 listopada 2019 w Nasze poradniki przez lobo.guru Obywatel (1,920 p.)
+1 głos
2 odpowiedzi 941 wizyt
0 głosów
1 odpowiedź 194 wizyt

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,293 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...