🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Dzialania na liczbach zapisanych jako string lub char

#135381
From: Charlie
Date: Mon, 14 Jan 2008 15:01
193 lines
5825 bytes
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.
Technical Details
Message-ID: <80cff3e9-36f2-4e19-947f-898c30f9c205@f3g2000hsg.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!news.germany.com!postnews.google.com!f3g2000hsg.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!news.germany.com!postnews.google.com!f3g2000hsg.googlegroups.com!not-for-mail
From: Charlie <charlie.europe@gmail.com>
Newsgroups: pl.comp.lang.java
Subject: Dzialania na liczbach zapisanych jako string lub char
Date: Mon, 14 Jan 2008 07:01:22 -0800 (PST)
Organization: http://groups.google.com
Lines: 198
Message-ID: <80cff3e9-36f2-4e19-947f-898c30f9c205@f3g2000hsg.googlegroups.com>
NNTP-Posting-Host: 83.7.74.73
Mime-Version: 1.0
X-Trace: posting.google.com 1200322883 672 127.0.0.1 (14 Jan 2008 15:01:23 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Mon, 14 Jan 2008 15:01:23 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: f3g2000hsg.googlegroups.com; posting-host=83.7.74.73;  posting-account=DUlPawoAAADSpuixFrEjWHG6k40tuXAY
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.11)  Gecko/20071127 Firefox/2.0.0.11,gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit