# String aus Zahlen multiplizieren -> unendlich große !



## Gurkus (12. Jan 2009)

Hi
wir haben die Aufgabe gestellt bekommen beliebig große Zahlen zu multiplizieren.
Somit ganz einfach die Aufgabenstellung:
Erstellen sie ein Programm welches beliebig große Zahlen miteinander multiplizieren kann.

Somit läuft es schon mal auf Strings hinaus.
Nur ich komme einfach nicht weiter.
Mein Problem liegt darin das ich die Zahlen zwar multiplizieren kann Stelle für Stelle 
aber ich kann später das Ergebnis nicht zusammen addieren.
also bei einer Zahl z.B. 999*999 fange ich an mit 9*9=81.
Somit weise ich einem String Buffer den Wert 81 zu.
Aber wenn ich dann 9*90=810 dazu addieren will finde ich keinen gescheiten Algorithmus 
um dies zu addieren ... 
argh das beispiel ist vielleicht auch schlecht gewählt aber wenn situationen kommen wo ich 19+19 addieren muss 
kommen bei mir tausend Probleme auf. Durch diesen "Überlauf".
Ich weiss nicht wie ich es hinbekommen soll ...
Vielleicht hat jemand nen kleinen Tip das wäre super !
Mein Kopf raucht  :bahnhof: 

bis denne
greetz nils


----------



## hdi (12. Jan 2009)

siehe Klasse "BigInteger"


----------



## tfa (13. Jan 2009)

Nimm keinen String, sondern ein int-Array, pro Ziffer ein int. Nach den Multiplikationsschritten gehst du das Array von hinten nach vorne durch um den Zehnerübertrag zu berechnen.
@hdi: Ich glaub, eine Lösung mit BigInteger zählt nicht.


----------



## ARadauer (13. Jan 2009)

es hilft vielleicht, wenn du weißt wie du aus einem String ein int und aus einem int einen String machst...


```
String zahl = "1234"; 
		   int x = Integer.parseInt(zahl);
		   String xStr = x+"";
```

wieso multiplizierst du stelle mit stelle?


----------



## SegFault (13. Jan 2009)

Weil dass das Prinzip des schriftlichen Multiplizierens ist. Hatten wir glaube ich in der 4. Klasse??? K.A. ich kanns eigentlich auch kaum noch. 

Das Problem was beim umwandeln von Strings in ints auftritt ist ein ggf auftretender überlauf. Die Aufgabe von Gurkus war explizit gestellt "beliebig lange" tfa hat einen guten Ansatz für das Problem gepostet.


----------



## babuschka (13. Jan 2009)

Prinzipielle Frage:

Der Ansatz von Gurkus ist doch prinzipiell gut, oder? Also sich klarzumachen, wie man das ganze per Hand lösen würde und das dann so umzusetzen.
Wenn ich es richtig verstanden habe, läuft tfas Vorschlag ja auf dasselbe Prinzip hinaus.


----------



## 0x7F800000 (13. Jan 2009)

ja, nur bei tfa's vorschlag muss man sich nicht mit irgendwelchen unbrauchbaren zwischenergebnissen in string-form rumschlagen, sondern es auch direkt in einer angebrachten form abspeichern.


----------



## Gast (29. Jan 2009)

hi ihc hab ne frage ist dringend und zwar muss ich ein javaprojekt anlegen
von x zahlen muss das programm die kleinste zahl rausfinden muss auhc mit negativen zahlen gehen o.o?
könnt ihr mir helfen^^? plz


----------



## ARadauer (29. Jan 2009)

das ist keine frage!
sondern das standard beispiel der ersten vorlesung... wenn du das nicht packst kannst du gleich schon exmatrikulieren ;-)

zeig mal was du bereits hast und wo das problem liegt...


----------



## Saxony (29. Jan 2009)

Hiho,

das Minimum kann man für beliebig viele Zahlen relativ einfach bestimmen:

Einfach durch ein int Feld laufen und zwei Werte vergleichen ist einer kleiner, so ist dieser dann das aktuelle minimum. Am ende des Durchlaufs hast du den kleinsten Wert gefunden.

bye Saxony


----------



## Saxony (29. Jan 2009)

Um es mal kurz und schmerzlos zu machen:


```
public static void main(String[] args) {
		
	int[] zahlen = {5, 1, 12, -8, 4, -2, 5, 10, -6};

	System.out.println(min(zahlen, 1, zahlen[0]));
}
	
private static int min(int[] f, int pos, int min) {
		
	if (pos < f.length) pos++;
	if (pos == f.length) return min;
		
	return (f[pos] < min)?min(f, pos, f[pos]):min(f, pos, min);
}
```

bye Saxony


----------



## ARadauer (29. Jan 2009)

naja ob das der lehrer so annimmt ;-)


----------



## Saxony (29. Jan 2009)

ARadauer hat gesagt.:
			
		

> naja ob das der lehrer so annimmt ;-)



Nunja auf jeden Fall könnte man damit auch gleich noch eine eventuell vorhandene Aufgabe zur Rekursion mit erfüllen. 

bye Saxony


----------



## Templon (29. Jan 2009)

Und hier das ganze noch iterativ =)


```
public static void main(String[] args) {
		double[] input = {1.5,4.2,-32,104,32,-135.25};
		double[] input2 = {};
		System.out.println(min(input));
		System.out.println(min(input2));
		System.out.println(min(null));

	}
	
	/**
	 * Gibt den kleinsten Wert des gegeneben Arrays zurück. Wenn das gegebene Array 
	 * <code>null</code> oder leer ist, gibt diese Methode <code>Double.NaN</code> zurück.
	 */
	public static double min(double [] input) {
		if (input == null || input.length == 0) return Double.NaN;
		
		double  min =  input[0];
		for (int i = 0; i < input.length; ++i) {
			min = Math.min(min, input[i]);
		} 
		return min;
	}
```


----------

