Dezimalzahl als Dualzahl ausgeben

C

Lösung mit UND-Operator

dec2bin.c
#include <stdio.h>
 
int main ()
{
    int zahl;
    printf ("Bitte eine Zahl eingeben: \n");
    scanf("%d", &zahl);
 
    int bin=1<<((sizeof(int)*8)-2);
 
    for (int i=0; i<(sizeof(int)*8) && bin>0; i++)
    {
        if ((zahl & bin)!=0)
            printf ("1");
        else printf ("0");
        bin=bin>>1;
    }
 
    printf("\n");
    return 0;
}

Lösung mittels Modulo

Hier ist dec2bin eine rekursive Funktion. Bei der Modulo-Rechnung erhalten wir immer die letzte Stelle, wir wollen aber mit der ersten Stelle anfangen. Also teilen wir zuerst die Zahl bis sie 0 ist, erst dann fangen wir an die letzten Stellen aller Aufrufe nacheinander auszugeben. Dh. wir steigen erst rekursiv bis zur ersten Stelle ab, dann geben wir die Stellen beim rekursiven Aufstieg aus.

dec2bin.c
#include <stdio.h>
 
void dec2bin(int num)
{
    if (num>0)
    {
        dec2bin(num/2);
        printf ("%d", num%2);
    }
}
 
int main ()
{
	int num=0;
	printf("Zahl eingeben: ");
	scanf("%d", &num);
 
	dec2bin(num);
 
        return 0;
}

Fortran

dec2bin_mod.F90
PROGRAM main
  integer :: zahl = 0;
  write (*,"(A,$)") "Bitte eine Zahl eingeben: "
  read (*,*) zahl
 
  call dec2bin_mod ( zahl )
  write (*,*) " "
END PROGRAM
 
recursive SUBROUTINE dec2bin_mod ( zahl )
  integer zahl
  integer tmp
 
  if (zahl > 0) then
    tmp = mod(zahl, 2)
    call dec2bin_mod ( zahl / 2 )
    write (*,"(I1,$)") tmp
  endif
END SUBROUTINE

Haskell

dec2bin.hs
dec2bin :: Int -> IO()
dec2bin zahl
  | zahl > 0 = do dec2bin ( zahl `div` 2 )
                  putStrLn ( show ( zahl `mod` 2 ))
  | otherwise = return ()

Rust

dec2bin.rs
fn dec2bin ( i: i32, f: bool ) {
    if f {
        print!("0b")
    }
    if i > 0 {
        dec2bin ( i/2, false );
        if i % 2 == 0 {
            print! ("0");
        } else {
            print! ("1");
        }
    }
}
 
fn main() {
    let input: i32 = 42;
    print!("{} in decimal: ", input);
    dec2bin ( input, true );
}