Multiplikation

Neue Frage »

Auf diesen Beitrag antworten »
Björn Multiplikation

Meine Frage:
Hi zusammen,

angenommen ich soll zwei Zahlen multiplizieren (wäre ja kein Problem), nur soll die Ausgabe folgendermaßen aussehen:

18*23
------
36
54

-----
414


Also erst die 18*2 und dann die 18*3, anschließend beides addieren, sprich wie man es "früher" in der Schule gelernt hat.


Meine Ideen:
Denke ich jetzt vielleicht nur zu kompliziert, aber ich meiner Meinung nach, wäre das so ziemlich aufwändig?

Vielen Dank für Eure Antworten :-)
 
Auf diesen Beitrag antworten »
eulerscheZahl

Du hast leider nicht angegeben, in welcher Sprache du das realisieren willst.
Hier mal etwas C#:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
public static string Multiply(int a, int b) {
	StringBuilder sb = new StringBuilder ();
	int aLength = a.ToString ().Length;
	int bLength = b.ToString ().Length;
	sb.AppendLine (a + "*" + b);
	sb.AppendLine (new string ('-', aLength + bLength + 1));
	int endPos = aLength + 2;
	foreach (char c in b.ToString()) {
		int tmp = a * (c - '0');
		int tmpLength = tmp.ToString ().Length;
		sb.AppendLine (new string (' ', endPos - tmpLength) + tmp);
		endPos++;
	}
	sb.AppendLine (new string ('-', aLength + bLength + 1));
	sb.AppendLine ((a * b).ToString ().PadLeft (aLength + bLength + 1, ' '));
	return sb.ToString ();
}


Ein Aufruf mit Console.WriteLine( Multiply (18, 23)); liefert:
code:
1:
2:
3:
4:
5:
6:
18*23
-----
  36
   54
-----
  414
Auf diesen Beitrag antworten »
Björn

Ah, sorry, ich programmiere in Java :-)
Auf diesen Beitrag antworten »
eulerscheZahl

Und schon wird es ein paar Zeilen länger.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public static String padLeft(String s, int n) {
	return String.format("%1$" + n + "s", s);
}

public static String multiply(int a, int b) {
	StringBuilder sb = new StringBuilder();
	int aLength = String.format("%d", a).length();
	int bLength = String.format("%d", b).length();
	sb.append(a + "*" + b + "\n");
	sb.append(padLeft("", aLength + bLength + 1).replace(' ', '-') + "\n");
	int endPos = aLength + 2;
	String bStr = String.format("%d", b);
	for (int i = 0; i < bLength; i++) {
		int tmp = a * (bStr.charAt(i) - '0');
		String tmpStr = String.format("%d", tmp);
		sb.append(padLeft(tmpStr, endPos) + "\n");
		endPos++;
	}
	sb.append(padLeft("", aLength + bLength + 1).replace(' ', '-') + "\n");
	sb.append(padLeft(String.format("%d", a * b), aLength + bLength + 1)
			+ "\n");
	return sb.toString();
}
 
Auf diesen Beitrag antworten »
Björn

Vielen Dank für die Antwort und den Code :-)
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »