Hallo zusammen,
ich muss ein Programm schreiben (Russische Bauernmultiplikation). An sich klappt alles, ich weiß jedoch nicht, wie ich die Anzahl der „----“ und „====“ so variiere, dass es mit der länge vom Ergebnis identisch ist. Mit zweistelligen Zahlen passt das, aber sobald einstellige Zahlen miteinander multipliziert werden sollen verschiebt sich natürlich alles. Z.b. ist die rechte „6“ dann nicht auf selber höhe wie die untere „6“ und das gleiche mit dem Ergebnis. Ich habe auch schon versucht das Problem mit printf statt println zu lösen, jedoch muss man da ja auch den Abstand angeben, z.B. %6d, der wiederum auch variiert.
(Siehe Anhang: Bild 1 & 2 ist mein Ergebnis und es soll so sein wie Bild 3)
Danke für jede Hilfe und hier ist mein Code =)
Ich weiß leider nicht, wie mein übersichtlich den Code einfügt, tut mir leid
import java.util.Scanner;
public class Bauernmultiplikation {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int num1 = Integer.parseInt(args[0]);
int num2 = Integer.parseInt(args[1]);
int laenge = String.valueOf(num1).length() + 5 + String.valueOf(num2).length();
printBoard(num1,num2);
int result = multipliziere(num1,num2);
int resultLength = Integer.toString(result).length();
System.out.println();
for(int i = 0; i < laenge - resultLength;i++)
System.out.print(" ");
System.out.print(result);
}
private static void printBoard(int num1, int num2) {
int laenge2 = String.valueOf(num1).length() + 5 + String.valueOf(num2).length();
System.out.printf("%1d %1s %1d \n" ,num1,"*",num2);
for(int i = 0; i< laenge2;i++)
System.out.print("-");
System.out.println();
while(num1>=1) {
if(num1 % 2 == 0)
System.out.printf("%2d %6d %s \n", num1, num2, "X");
else
System.out.printf("%2d %6d \n", num1, num2);
num1/=2;
num2*=2;
}
for (int j = 0; j < laenge2;j++)
System.out.print("=");
}
private static int multipliziere(int x, int y){
if(x==1)
return y;
if(x%2!=0)
return y + multipliziere(x/2, y*2);
else
return multipliziere(x/2, y*2);
}
}