🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #135380

Re: Dzialania na liczbach zapisanych jako string lub char

#135380
From: lukaszoliwa1
Date: Mon, 06 Jan 2014 11:30
196 lines
6517 bytes
W dniu poniedziałek, 14 stycznia 2008 15:50:44 UTC+1 użytkownik Charlie napisał:
> 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.

Cześć, i jak tam udało się napisać kod?
Technical Details
Message-ID: <d4309034-4d23-4c97-8e91-ca53e791c9c9@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!p15no65530060qaj.0!news-out.google.com!l9ni4950qay.0!nntp.google.com!p15no65530049qaj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <64f3bfce-d011-4da4-ad96-9f8b10bba394@i72g2000hsd.googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.42.146.201 with SMTP id k9mr19546428icv.26.1389007809766;        Mon, 06 Jan 2014 03:30:09 -0800 (PST)
X-Received: by 10.49.110.165 with SMTP id ib5mr18641qeb.28.1389007809735; Mon, 06 Jan 2014 03:30:09 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!p15no65530060qaj.0!news-out.google.com!l9ni4950qay.0!nntp.google.com!p15no65530049qaj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.java
Date: Mon, 6 Jan 2014 03:30:09 -0800 (PST)
In-Reply-To: <64f3bfce-d011-4da4-ad96-9f8b10bba394@i72g2000hsd.googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.28.57.123; posting-account=zcYLgAoAAADxxtniO3aZ6PsE0K1tcTap
NNTP-Posting-Host: 83.28.57.123
References: <64f3bfce-d011-4da4-ad96-9f8b10bba394@i72g2000hsd.googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <d4309034-4d23-4c97-8e91-ca53e791c9c9@googlegroups.com>
Subject: Re: Dzialania na liczbach zapisanych jako string lub char
From: lukaszoliwa1@gmail.com
Injection-Date: Mon, 06 Jan 2014 11:30:09 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit