Dzialania na liczbach zapisanych jako string lub char

Oglądasz archiwalną wersję wątku "Dzialania na liczbach zapisanych jako string lub char" z forum pl.comp.lang.java



Charlie - 14 Sty 2008, 09:50
Witam, mam nastepujace zadanie:
Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
projektach na lepsza ocene wszystkie implementowane operacje
obowiązkowo powinny działać dla liczb ujemnych.

Co to jest duża liczba całkowita?

Dużą liczbą całkowitą nazywamy liczbę, która:

1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
języku JAVA, czyli int, long, float czy double;

2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
zaokrągleń.

Oznacza to, że jedynym typem zdolnym spełnić wszystkie te wymogi jest
typ String lub  char[] (czyli tablice znaków), a inaczej mówiąc
tablica znaków, gdzie każdy znak reprezentuje konkretną cyfrę w naszej
liczbie, a ww. operacje będą sprowadzały się do zaimplementowania
znanych nam ze szkoły podstawowej operacji dodawania, mnożenia,
odejmowania i dzielenia pisemnego (pod kreską, czy jak kto woli) na
ciągach znaków. Po zaimplementowaniu poniższej funkcja main powinna
zadziałać poprawnie i podać wyniki jak poprawnie. Jeżeli coś jest
niejasne, patrz UWAGI poniżej.

Przykład:

public class Projekt{

    public static void main(String[] args) {

           DuzaLiczba dl1 = new DuzaLiczba();

           DuzaLiczba dl2 = new DuzaLiczba(1500);

           DuzaLiczba dl3 = new
DuzaLiczba("15000000000000000000000001");

           System.out.println("Linia 1: "+dl1) ;

           System.out.println("Linia 2: "+dl2) ;

           System.out.println("Linia 3: "+dl3) ;

           dl1 = dl2.dodaj(dl3);

           System.out.println("Linia 4: "+dl1) ;

           System.out.println("Linia 5: "+dl2) ;

           DuzaLiczba dl4= dl2.odejmij(dl3);

           System.out.println("Linia 6: "+dl4) ;

           System.out.println("Linia 7: "+dl2) ;

           dl1 = dl2.mnoz(new DuzaLiczba("2"));

           System.out.println("Linia 8: "+dl1) ;

           System.out.println("Linia 9: "+dl2) ;

           dl4= dl2.podziel(new DuzaLiczba("3"));

           System.out.println("Linia 10: "+dl4);

           System.out.println("Linia 11: "+dl2);

           dl4=dl1.dodaj(dl2).odejmij(dl2).mnoz(dl2).podziel(dl3);

           System.out.println("Linia 12: "+dl4);

           System.out.println("Linia 13: "+dl1);

           System.out.println("Linia 14: "+DuzaLiczba.silnia(new
DuzaLiczba(10)));

           System.out.println("Linia 15: "+DuzaLiczba.fibbonaci(new
DuzaLiczba(6)));

           dl1 = new DuzaLiczba("1234");

           dl4 = new DuzaLiczba("1235");

           dl4 = DuzaLiczba.odejmij(dl4, new DuzaLiczba("1"));

           if(dl1.jestRowna(dl4)==true)

              System.out.println("Linia 16: dl1 jest rowna dl4");

           else

              System.out.println("Linia 16: dl1 jest rozna od dl4");

           DuzaLiczba.podziel(dl4, new DuzaLiczba("2"));

           if(dl1.jestMniejsza(dl4)==true)

              System.out.println("Linia 17: dl1 jest mniejsza od
dl4");

           else

              System.out.println("Linia 17: dl1 jest wieksza od dl4");

           DuzaLiczba.mnoz(dl4, new DuzaLiczba("3"));

           if(dl1.jestMniejsza(dl4)==true)

              System.out.println("Linia 18: dl1 jest wieksza od dl4");

           else

              System.out.println("Linia 18: dl1 jest mniejsza od
dl4");

   }

}



class DuzaLiczba{

....

}



Podszedlem do tego w ten sposob ze potworzylem konstruktory najpierw:

public String liczba;

                public DuzaLiczba(){
                        liczba="0";
                }

                public DuzaLiczba(int a){
                        liczba=""+a;
                }

                public DuzaLiczba (String s){
                        liczba=s;
                }

//I TUTAJ POWINNO BYC DODAWANIE:

        public void dodaj(DuzaLiczba a){
                        char[]l1 = liczba.toCharArray();
                        char[]l2 = a.liczba.toCharArray();
)

Zastanawiam sie co z tym zrobic dalej. Mam te liczby zapisane w
tablicach znakow. Musze napewno sprawdzic czy sa rowne. Jesli jedna
jest krotsza to np uzupelnic ja zerami. Nie wiem jak to zrobic, czy
nie lepiej odwrocic tablice zeby zera dopisywac z prawej?

Jesli juz mam dwie rowne tablice to chyba moge je juz dodwac. Czy
zrobic to jakas petla?

Moze nie bawic sie tutaj tablicami char, tylko zrobic to poprostu na
stringach?

Wiem ze zeby zrobic ze znaku liczbe to trzeba odjac od niej kod ascii
zera.




Brzezi - 14 Sty 2008, 10:55

//I TUTAJ POWINNO BYC DODAWANIE:
   public void dodaj(DuzaLiczba a){
                   char[]l1 = liczba.toCharArray();
                   char[]l2 = a.liczba.toCharArray();
)

Zastanawiam sie co z tym zrobic dalej. Mam te liczby zapisane w
tablicach znakow. Musze napewno sprawdzic czy sa rowne. Jesli jedna
jest krotsza to np uzupelnic ja zerami. Nie wiem jak to zrobic, czy
nie lepiej odwrocic tablice zeby zera dopisywac z prawej?

Jesli juz mam dwie rowne tablice to chyba moge je juz dodwac. Czy
zrobic to jakas petla?



Podstawowka sie klania -dodawanie pod kreska

Pozdrawiam
        Brzezi



kalarus - 15 Sty 2008, 02:05

Witam, mam nastepujace zadanie:
[ciach]
2) pamietane sa wszystkie cyfry bez wzgledu na pozycje i bez zadnych
zaokraglen.



przy dzieleniu tez?



Charlie - 15 Sty 2008, 11:56

przy dzieleniu tez?



Dzielenie jest w sumie najtrudniejsze i najmniej mi na nim zalezy,
Przede wszystkim nie wiem jak zrobic to dodawanie




Przemysław Kowalczyk - 15 Sty 2008, 12:27

Dzielenie jest w sumie najtrudniejsze i najmniej mi na nim zalezy,
Przede wszystkim nie wiem jak zrobic to dodawanie



wez dlugopis i kartke, napisz na niej tak:

  48437439
+94385944
---------

jak to obliczysz, to zaimplementuj taki sam algorytm w swojej klasie :)

pzdr
        szeryf



Mentos - 16 Sty 2008, 06:20

Witam, mam nastepujace zadanie:
Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
projektach na lepsza ocene wszystkie implementowane operacje
obowiązkowo powinny działać dla liczb ujemnych.

Co to jest duża liczba całkowita?

Dużą liczbą całkowitą nazywamy liczbę, która:

1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
języku JAVA, czyli int, long, float czy double;

2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
zaokrągleń.



A BigInteger nie spelnia wymogow??

pozdrawiam



Leonard Milcin - 16 Sty 2008, 06:34


| Witam, mam nastepujace zadanie:
| Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
| przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
| powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
| mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
| dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
| projektach na lepsza ocene wszystkie implementowane operacje
| obowiązkowo powinny działać dla liczb ujemnych.

| Co to jest duża liczba całkowita?

| Dużą liczbą całkowitą nazywamy liczbę, która:

| 1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
| języku JAVA, czyli int, long, float czy double;

| 2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
| zaokrągleń.

A BigInteger nie spelnia wymogow??



Raczej nie. Wątpię, żeby nauczyciel zaakceptował wrapper naokoło
istniejącego rozwiązania;-)

Pozdrawiam,
Leonard



jvv - 16 Sty 2008, 07:03

| A BigInteger nie spelnia wymogow??

Raczej nie. Wątpię, żeby nauczyciel zaakceptował wrapper naokoło
istniejącego rozwiązania;-)



Nauczyciel zapewne nie wie, ze istnieje klasa BigInteger - uczyl sie pewnie
javy z kasiazki: java - to proste :))))



Leonard Milcin - 16 Sty 2008, 08:09

| A BigInteger nie spelnia wymogow??
| Raczej nie. Wątpię, żeby nauczyciel zaakceptował wrapper naokoło
| istniejącego rozwiązania;-)

Nauczyciel zapewne nie wie, ze istnieje klasa BigInteger - uczyl sie pewnie
javy z kasiazki: java - to proste :))))



Hmm... jestem przekonany, że nauczyciel Wie, co to jest BigInteger (a w
każdym bądź razie nie widzę powodów by sądzić, że nie wie) a jego celem
jest zmuszenie uczniów do myślenia i zaimplementowania własnej wersji
wedle własnych możliwości. Uważam, że to całkiem dobry pomysł na zadanie.

Pozdrawiam,
Leonard


String (replace() i replaceAll())
map.put(int, value) vs map.put(string, value)
String line; if (line=="cos"){...}....problem
Eclipse i kompilacja
  • pielegniarki opieka kielce
  • czemu po moim routerze jest getaway a potem
  • kretynskie smsy od roznych reklamodawcow
  • smieszne teksty historie
  • drzewka do kupienia
  • katowice awf fizjoterapia egzaminy
  • java;warcaby
  • tunezyjski aar 1066 1820
  • o symbianie na powaC2 nie czyli
  • Zbieranina wiadomości z for dyskusyjnych || Indeks