Pomoc przy zadaniu ze SPOJ-a JLITOSL - Liczba na słowo

0

Witam!
Jestem w trakcie nauki programowania C++ i potrzebuję pomocy przy zadaniu ze SPOJ-a https://pl.spoj.com/problems/JLITOSL/
Zupełnie nie wiem jak się za nie zabrać, wydaje mi się że jeszcze nie znam narzędzi, które umożliwiłyby mi znalezienie pomysłu na rozwiązanie, ale chciałabym je poznać. W "Przewodniku dla początkujących" Alex'a Allain, znalazłam nawet plan, jak je rozwiązać:

  1. Rozbij liczbę na trzycyfrowe grupy.
  2. Dla każdej z tych grup wyznacz odpowiedni tekst, dołącz do niej rząd wielkości po czym połącz ze sobą poszczególne grupy.
  3. Aby uzyskać słowny zapis grupy trzycyfrowej, wyznacz w której setce grupa ta się znajduje, odszukaj w kodzie odpowiadający jej tekst i dołącz do niego zapis grupy dwucyfrowej.

Stanęłam już na pierwszym punkcie. Domyślam się, że powinnam wczytać liczbę do zmiennej string, następnie rozdzielić ją na trzycyfrowe grupy, np. 73645812 -> 73 645 812, tylko jak? Za pomocą pętli, wpisywać trzycyfrowe grupy do wektorów?
Domyślam się, ze dalej, aby powinnam użyć map, w celu dopasowania odpowiedniego tekst do liczb. Proszę o pomoc, mam pustkę w głowie :(

1

wiec jezeli mamy liczbe
123 456 789
pierwsze trzy liczby "normalnie" czytamy jako
sto dwadziescia trzy. Dopiero pozniej dodajemy Miliony
nastepne
czterysta piedziesiat szesc... tysiecy
nastepnie
siedemset osiemdziesiąt dziewiec

teraz wczytujemy liczbe
123456789

Mozesz to zrobic na kilka sposobow

  1. dzielic liczbe przez modulo z 1000, 100 oraz 10. Wtedy bedziesz miec kolejne liczby (setki, dziesiatki jednostki). Nastepnie mozesz po prostu podzielic liczbe przez 1000 (jezeli jest to int). Pamietaj, ze bedziesz szla w prawej strony.
    Problem tutaj jest, ze jezeli bedzie liczba 25 to dzielic przez 1000 nie ma sensu

  2. wrzucic do stringa. Sprawdzic jaka jest dlugosc. Podzielic na odpowiednie grupy. Wykorzystac std::map tak by mapowalo odpowiednie wartosci (powiedzmy ze mapa taki switch w uproszczeniu).

Jak masz w stringu to po prostu dzielisz stringa na 3 od prawej strony
https://stackoverflow.com/questions/236129/the-most-elegant-way-to-iterate-the-words-of-a-string

Do mapy wrzucasz na zasadzie takiej map[100] = "sto" czy map[200] = "dwiescie" czy map[30] = "trzydziesci"
wyjatkiem bedzie gdy liczba dziesiatek bedzie 1 to wtedy musisz sprawdzic rowniez 11,12,13,14

zapewne nie jest to optymalne rozwiazanie, ale jest to jakies rozwiazanie :)

0

To Siostro tak na dobry początek sposób prostszy,czyli konwersja na std::string - https://en.cppreference.com/w/cpp/string/basic_string/to_string
Jak już masz liczbę zmienioną na stringa to https://en.cppreference.com/w/cpp/string/basic_string/substr aby pobrać 3-cyfrowe cząstki z niego.
Powodzenia.

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