#include <stdio.h>

int umrechnen(int number);
void umrechnen2(int number, int bits);

int main() {
    int number = 0;
    int validInput = 0;

    while (!validInput) {
        printf("Bitte geben Sie eine Zahl ein: ");
        if (scanf("%d", &number) != 1) {
            printf("Ungueltige Eingabe. Bitte geben Sie eine gueltige Zahl ein.\n");
            while (getchar() != '\n'); // Eingabepuffer leeren
        } else {
            validInput = 1;
        }
    }

    if (number >= 0) {
        int erg = umrechnen(number); // Positive Zahl in Binär umrechnen
        printf("Binaerdarstellung: %d\n", erg);
    } else {
        int bits = sizeof(int) * 8 - 1; // Anzahl der Bits (z. B. 31 für 32-Bit-Systeme)
        printf("Binaerdarstellung: ");
        umrechnen2(number, bits); // Negative Zahl im Zweierkomplement ausgeben
        printf("\n");
    }

    return 0;
}

int umrechnen(int number) {
    if (number == 0) {
        return 0; // Basisfall: Binärdarstellung von 0 ist 0
    } else {
        return number % 2 + 10 * umrechnen(number / 2); // Rekursive Umrechnung
    }
}

void umrechnen2(int number, int bits) {
    if (bits < 0) {
        return; // Basisfall: Keine weiteren Bits zu prüfen
    }

    unsigned int mask = 1 << bits; // Maske für das aktuelle Bit
    if (number & mask) {
        printf("1");
    } else {
        printf("0");
    }

    return umrechnen2(number, bits - 1); // Rekursiver Aufruf für das nächste Bit
}