zmiana kwoty z liczb na słownie QT

0

Witam
Drodzy forumowicze prosiłbym was o pomoc, potrzebuję zmienić wartość z cyfr na słownie (piszę programik do generowanie FV) i nie wiem jak się do tej konwersji zabrać...
może ktoś przerabiał już ten temat i ma rozwiązanie, na które mógłby mnie naprowadzić.

pozdrawiam

0

No a jak robisz to normalnie? :P
Rozbij sobie swój tok myślenia na etapy.

0

hmm tylko nie chciałbym stworzyć np: sześć zero sześć itd tylko żeby wyszło sześćset sześć....

0

To w żaden sposób nie zmienia mojego pytania.

0

Więc zrób sobie 5 tablic: dla jednostek, nastek, dziesiątek, setek i tysięcy+, potem dzielisz liczbę na 3-cyfrowe segmenty i obrabiasz pierwszymi 4, na koniec dopisując stosowne słówko z piątej (ew dodając odpowiednią końcówkę, w końcu jeden tysiąc, dwa tysiące i pięć tysięcy). Jak chcesz mam coś takiego ale w Pythonie.

0

Na początku powinieneś sprawdzić długość stringa, który zawiera kwotę. np 300. Ma długość równą 3. (ilość znaków). n - dlugość twojego stringa. Następnie wykonujesz dzielenie przez 10 do potęgi n-1. Czyli w tym przypadku dzielisz przez 100 żeby znać pierwszą cyfrę. Jest to 3. Stworzyłbym wcześniej tablicę stringów tak że tab[3]="trzy";
I przy odpowiednich wartościach dodawać tylko koncówkę. Czyli dla setek dodajesz "sta". Dla dziesiątek byłaby końcówka "dzieści". Ale pamiętaj że to nie jest uniwersalne dla wszystkich. Np dla 2 już nie będzie pasowało. czyli będzie dwieście. Czyli przy dwójce na pozycji 3 i 6 masz początek "dwie". To wszystko musisz ująć w programie. Spróbuje sobie to napisać ale w C#

0
#include <map>

using namespace std;

string slownie(unsigned value) {
    map<unsigned, string> slowa = {
        { 0, "zero"}, { 1, "jeden"}, { 2, "dwa"}, { 3, "trzy"}, { 4, "cztery"}, { 5, "pięć" },
        { 6, "sześć" }, { 7, "siedem" }, { 8, "osiem" }, { 9, "dziewięć"}, { 10, "dziesięć" },
        { 11, "jedenaście" }, { 12, "dwanaście"}, { 13, "trzynaście" }, { 14, "czternaście" }, { 15, "piętnaście" },
        { 16, "szesnaście" }, { 17, "siedemnaście" } , { 18, "osiemnaście" }, { 19, "dziewiętnaście" },
        { 20, "dwadzieścia" }, { 30, "trzydzieści" }, { 40, "czterdzieści" }, { 50, "pięćdziesiąt" },
        { 60, "sześćdziesiąt" }, { 70, "siedemdziesiąt" }, { 80, "osiemdziesiąt" }, { 90, "dziewięćdziesiąt" },
        { 100, "sto" }
    };
    if(value > 100) {
        return "";
    }

    if( (0 != (value % 10) ) && ( value > 20) ) {
        return slownie((value / 10) * 10) + string(" ") + slownie(value % 10);
    }

    return slowa[value];
} 

Można ew. unsorted_map. Masz i dalej baw się sam. Idea jest widoczna :-)

0

Dzięki :)

0

Polecę offtopem...

Mokrowski napisał(a):
    return slownie((value / 10) * 10) ....

Może ktoś miły mnie uświadomi, czy to jest w standardzie, że wynik pierwszego dzielenia będzie "implicit floor" ? @kq @twonek

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