import algds.IOUtils;
public class Nat{

    static void main(String argv[]) {
        System.out.print ("Zahl eingeben :  ");
        int zahl = IOUtils.readInt ();
        System.out.println(zahl);
        System.out.println("Dual  : "+toDual(zahl));
        System.out.println("Oktal : "+toOctal(zahl));
        System.out.println("Hexal : "+toHex(zahl));
    }
    //Methode Convert
    static String convert(int basis , int zahl)
    {
        int rest;
        String ergebnis=""; 
    String ziffer[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};

        /* Der Algorithmus zur Umwandlung ist einfach das nacheinander Teilen der Dezimalzahl
        durch die Basis bis die Zahl den Wert 0 annimmt. Die Reste in umgekehrter
        Reihenfolge aufgeschrieben ergibt unsere umgewandelte Zahl. Man muss nur be- 
        achten das im Hexadezimalsystem für die Werte 10-15 die Buchstaben 
        A-F stehen. Da im Dual- und Oktalsystem nie Reste über 7 rauskommen
        kann man eine Zeichenkette definieren die die Werte für die Reste bereitstellt.
        Ist der Rest 0 wird in unser Ergebnis das Zeichen an Stelle 0 unserer vordefiniertem
        Zeichenkette geschrieben*/

        do {
            rest = zahl%basis;
            ergebnis = ziffer[rest] + ergebnis; //Rest wird immer links an die Zeichkette angehängt
            zahl = zahl/basis;
        }
        while (zahl>0);
        return ergebnis;
    }

    static String toHex(int zahl) //Methode toHex
    {
        return(convert(16,zahl));
    }
    static String toOctal(int zahl) //Methode toOctal
    {
        return(convert(8,zahl));
    }
    static String toDual(int zahl) //Methode toDual
    {
        return(convert(2,zahl));
    }
}