import algds.IOUtils;
/**
 * AlgDs WS99 Aufgabe 13.
 * Ermittelt das Produkt zweier Zahlen als applikativer Algorithmus.
 *
 * @author Christian Semrau, 8.11.1999, 24.12.1999
 * <a href="mailto:Christian.Semrau@student.uni-magdeburg.de">
 * Christian.Semrau@student.uni-magdeburg.de</a>
 */
public class ChS_Aufg13 {

/**
 * Liefert x*y.
 * Liefert im Gegensatz zum Algorithmus der Aufgabenstellung
 * fuer alle Werte ein korrektes Ergebnis.
 */
static int f(int x, int y) {
  return(
	(x==0) ? 0
	: (x<0) ? -f(-x,y)	// (<-) nicht Teil des Originals, dort wird..
	  : (x%2==0)	// auch fuer x<0 dieser (<-) Teil abgearbeitet
		? f(x/2, 2*y)
		: f((x-1)/2, 2*y)+y
  );
} // f()

public static void main(String[] args) {
  int x,y;
  System.out.println("AlgDs WS99 Aufgabe 13, Christian Semrau, 08.11.1999");

  // Verwendet args.length, um die Anzahl der Parameter zu pruefen
  if (args.length<2) {
  // zuwenige Parameter angegeben
	System.out.println("Das Programm bestimmt das Produkt von x und y.");
	System.out.print("x: ");  x = IOUtils.readInt();
	System.out.print("y: ");  y = IOUtils.readInt();
  } else
  try {
  // Uebernahme von der Kommandozeile
	x = new Integer(args[0]).intValue();
	y = new Integer(args[1]).intValue();
  }
  catch(NumberFormatException e) {
  // einer der beiden ist keine Zahl
	System.out.println("Zwei Zahlen oder gar keine Parameter!");
	return;
  }

  System.out.println("f("+x+","+y+")="+f(x,y));
} // main()
} // class ChS_Aufg13