
/* 
Schreiben Sie ein Programm, das herausfindet, ob die Binaerdarstellung einer
eingegebenen long-Zahl mindestens einen 1er-Drilling enthaelt. Unter einem
1er-Drilling wollen wir - unabhaengig von der Nachbarschaft - drei
nebeneinanderstehende Einsen verstehen.
*/

/*
Das Programm untersucht in einer Schleife nacheinander alle Bits der
eingegebenen Zahl. Immer wenn es eine 1 vorfindet, wird ein Zaehler um
eins erhoeht, andernfalls wird er auf 0 gesetzt. Ist der Zaehler zu irgendeinem
Zeitpunkt gleich 3, so wurde ein Einser-Drilling gefunden und die Schleife wird beendet.
In der Schleife wird jeweils das letzte Bit (Zahl & 0x1) bearbeitet; an-
schliessend werden die uebrigen Bits um eine Stelle nach rechts geschoben.
Dies muss sooft getan werden, wie die Laenge der Binaerdarstellung der Zahl ist.
Die Binaerdarstellung eines long-Wertes ist in Java 64 Bit lang.
*/

/*
Den Test
      ((zahl & 0x1) != 0)
koennen wir auch folgendermassen formulieren
      (zahl % 2 != 0)

Die Anweisung
      zahl >>= 1; 
duerfen wir aber keineswegs durch
      zahl /= 2;
ersetzen, da sonst das Ergebnis fuer negative Eingabewerte falsch werden kann.

Bsp.: Eingabewert == -1, die Binaerdarstellung besteht aus 64 Einsen; es gibt
      also Drillinge. -1 / 2 liefert den Wert 0, dessen Binaerdarstellung
      aus 64 Nullen besteht; somit behauptet das Programm, dass keine
      Drillinge vorhanden sind.
*/




import JavaPack.*;


class Drillinge
{
  public static void main(String[] argv)
  {
    long zahl, einsen, i;
  
    System.out.print("Bitte geben Sie eine long-Zahl ein: ");
    System.out.flush();
    zahl = Einlesen.LiesLong();
  
    einsen = 0;
    i = 64;
    while(i-- > 0  &&  einsen < 3) {
      einsen = ((zahl & 0x1) != 0) ? einsen + 1 : 0;
      zahl >>= 1;
      // Wir koennen hier >> verwenden, da wir selbst mitzaehlen
      // und daher unabhaengig davon sind, ob links Nullen oder 
      // Vorzeichen nachgezogen werden.
    }
  
    if(einsen >= 3)
      System.out.println("Hurra, Drillinge!\n");
    else
      System.out.println("Keine Drillinge.\n");
  }
}


