
/* 
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.
*/

/*
Dieses Programm ist eine Variante des Programms Drillinge.java, die meist
effizienter als das Original ist. Wir machen uns zunutze, dass keine Einsen
mehr vorhanden sein koennen, wenn die Zahl Null geworden ist.
*/



import JavaPack.*;


class MehrDrillinge
{
  public static void main(String[] argv)
  {
    long zahl, einsen;
  
    System.out.print("Bitte geben Sie eine long-Zahl ein: ");
    System.out.flush();
    zahl = Einlesen.LiesLong();
  
    einsen = 0;
    while(zahl != 0  &&  einsen < 3) {
      einsen = ((zahl & 0x1) != 0) ? einsen + 1 : 0;
      zahl >>>= 1; 
      // Wir muessen hier >>> verwenden, um sicherzustellen, dass
      // zahl auch dann irgendwann Null wird, wenn die eingelesene zahl
      // negativ ist.
      // Zur Erinnerung: >> zieht das Vorzeichen nach, >>> immer Null
    }
  
    if(einsen >= 3)
      System.out.println("Hurra, Drillinge!\n");
    else
      System.out.println("Keine Drillinge.\n");
  }
}


