A cura di: Administrator

Download sorgente

  /*   * Prendete in input un intero contenente soltanto   * degli 0 e degli 1, ovvero un intero "binario",   * e visualizzate il suo equivalente decimale.   * (Suggerimento: per prelevare le cifre del numero   * "binario" una per volta da destra a sinistra,   * utilizzate gli operatori di divisione e di modulo.   * Nel sistema numerico decimale, la cifra piu' a   * destra ha un valore posizionale di 1 e quelle che   * si susseguono a sinistra hanno un valore posizionale   * di 10, poi 100, poi 1000, ecc; allo stesso modo,   * nel sistema numerico binario, la cifra piu' a   * destra ha un valore posizionale di 1 e quelle che   * si susseguono a sinistra hanno un valore posizionale   * di 2, poi 4, poi 8, ecc.   * Di conseguenza il numero 234 potra essere   * interpretato come 4 * 1 + 3 * 10 + 2 * 100.   * L'equivalente decimale del binario 1101 sara'   * 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 ovvero 1 + 0 + 4 + 13   * ovvero 13).   *   */  #include <stdio.h>  #define BASE 2  int  main(void)  {      unsigned int base = BASE;      unsigned int n, nb;      unsigned int cifra;      unsigned int n10 = 0;   /* valore in base 10  */      unsigned int peso = 1;  /* peso della cifra   */      printf("Inserire il numero in base %u: ", base);      scanf("%u", &n);      nb = n;      while (nb > 0) {  	cifra = nb % 10; /* LSB, cifra a destra */  	/* controllo che la cifra appartenga alla base */  	if (cifra > BASE - 1) {  	    printf("Numero non in base %u!n", base);  	    return 1;  	}  	n10 = n10 + cifra * peso;  	peso = peso * base;  	/* scarta la cifra piu' a destra */  	nb = nb / 10;      }      printf("(%u)_%u = (%u)_10n", n, base, n10);      return 0;  }