Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Pętla while + Liczby Amstronga

kesztyn 22 Sty 2011 17:56 1583 1
  • #1 22 Sty 2011 17:56
    kesztyn
    Poziom 7  

    Na początek mój program:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    No i teraz założenia: Liczby Amstronga to takie w których suma sześcianów składowych są równe liczbie podstawowej. Przykład: 371 == 3^3*7^3*1^3 == 27+343+1

    Treść w skrócie: Napisać program w którym użytkownik podaje przedział, a Ty w tym przedziale znajdujesz liczby Amstronga.

    Co robi a czego nie robi mój program:
    - sprawdza przedział - jest dość głupkoodporny
    - koniec
    Problem:
    - Ma problem z chodzeniem po x. X jest zwiększany co jeden w kroku, a następnie rozkładany na liczby tysięcy, setek dziesiątek i jedności. Później porównuje wynik. Dodatkowo są komentarze przy poszczególnych linijkach.


    O co proszę: Zrobić żeby zadziałało (wystarczy część z problemem albo poprawienie moje błędu) a ja już rozkminię gdzie co popsułem.

    PS: Jeżeli ktoś mi napisze "znajdź sobie w internecie taki program i sprawdź" to ma u mnie minusa - trzy takie i śmierć . Gdybym chciał to bym skopiował. Ale chcę się nauczyć.

    Z góry dziękuję.

    0 1
  • #2 22 Sty 2011 19:12
    axyzzya
    Poziom 11  

    Dobra, prześledź co robi ta Twoja pętla do while w pierwszym cyklu:
    niech x= 4256
    n1=4;
    x=4256-4000=256
    i tak dalej. odejmujesz od x kolejno setki i dziesiątki aż w końcu x=6.
    Tymczasem Ty zakładasz, że x na koniec pętli jest równe nadal 4256.
    Aby to działało musisz przywrócić taką wartość x;
    musisz dodać linijkę x=j; przed x++;

    Ja bym wczytał końce tych przedziałów jako tablice charów (następnie przesunął w tablicy pierwszej łańcuch w prawo o tyle, aby cyfry jedności znalazły się na tych samych pozycjach w obu tablicach).

    Ale robienie tego wszystkiego jest całkowicie zbędne, bo liczb 3-narcystycznych w bazie 10 jest dokładnie 5:
    1=1^3
    153 = 1^3 + 5^3 + 3^3
    370 = 3^3 + 7^3 + 0^3
    371 = 3^3 + 7^3 + 1^3
    407 = 4^3 + 0^3 + 7^3
    Wystarczy zapisać je sobie w kodzie i sprawdzać, czy należą do przedziału.

    0