[C] Problema stampa array

pippopluto95
Salve a tutti! :-D
Ho come compito il seguente esercizio:

"Si vuole scrivere un programma C che, preso in ingresso un valore intero n, ne effettui la conversione nel corrispondente numero binario e lo memorizzi in un vettore."

#include <stdio.h>
#include <stdlib.h>

#define MAX 32

int main ()
{
    int numero_intero, i;
    int numero_binario[MAX];
    
    
    printf("Inserisci un numero intero: ");
    scanf ("%d", &numero_intero);
    
          
        for (i = 0; i < MAX; i++){
            
        if (numero_intero%2 == 0)
        numero_binario[i]=0;
        
        else
        numero_binario[i]=1;
        
        numero_intero = numero_intero/2;
        
        }
        
         for (i = MAX-1; i >= 0; i--){
         
         printf("%d", numero_binario[i]);
        
        }
        
    system("pause");
    return 0;
    
}


Il programma funziona correttamente, solo che nella stampa a video comprende anche tutti gli zeri precedenti al numero binario.
Mi spiego:

per fare un esempio, il numero 18 in binario è 10010, ma a me risulta che sia:

00000000000000000000000000010010

ovviamente perchè ho usato #define MAX 32.

La mia domanda è questa: come posso fare per impartire al compilatore l'ordine di inziare a stampare a video i valori da quando incontra il numero 1 (escludendo in questo modo tutti questi zeri fastidiosi)?

Grazie mille a tutti quelli che risponderanno! :D :D

Risposte
sapo931
Ciao, puoi fare nel seguente modo:

Prendi il vettore dove hai salvato il numero binario e con un for cerca la posizione del primo 1. Poi nel for di stampa parti da quell'indice , in modo da saltarw tut4i gli altri zeri iniziali.

vict85
Come vuoi che il tuo codice si comporti con i numeri negativi? Insomma il tuo codice ha un comportamento che potrebbe non essere quello che vuoi. Vuoi che ti rappresenti la loro scrittura in memoria?

vict85
Comunque MAX definito così è discutibile. Lo standard non ti garantisce che int sia di 32bit. Il modo corretto di definirlo sarebbe attraverso sizeof(int)*CHAR_BIT dove CHAR_BIT (che di solito è uguale a 8) è definito in limits.h

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.