Domanda

Come potrei prendere un numero come 123456 e averlo stampato come 1 2 3 4 5 6?

È stato utile?

Soluzione

Come ha menzionato 'jamesdlin' nel suo commento, l'approccio di GMan funzionerebbe, tuttavia dovrai memorizzarlo in un buffer per poterlo stampare nell'ordine corretto (il suo algoritmo stamperebbe "6 5 4 3 2 1" per l'input 123456).A questo punto direi che sarebbe molto più semplice usare semplicemente sprintf come suggerito da "thefromhere" nella sua risposta (se questo non è un incarico di classe di algoritmo ovviamente).

Secondo me il modo più semplice per farlo sarebbe usare la ricorsione, in questo modo puoi stampare le cifre nell'ordine giusto senza utilizzare buffer.

L'implementazione ricorsiva è molto semplice:

void PrintfRecursivly(int number)
{
     if (number < 0) 
     {
       number *= -1;
       printf("- ");           
     }
     if (number > 10) 
     {
        PrintfRecursivly(number / 10);
        printf(" ");
     }

     printf("%d", number % 10);     
}

int main()
{
   int number = -78900456;
   PrintfRecursivly(number);

   return 0;
}

Ingresso:

-78900456

Produzione:

- 7 8 9 0 0 4 5 6

MODIFICARE:Grazie a Steve Jessop che mentre ero via ha suggerito un algoritmo corretto per gli interi positivi.Ho modificato il metodo precedente per stampare correttamente tutti gli interi (positivi e negativi), senza l'ultimo spazio.

Tieni presente che possiamo evitare di verificare la presenza di valori negativi in ​​ogni ricorsione, eseguendo il controllo solo una volta (nella funzione principale o dovunque) ma non l'ho scritto perché perderemmo più in chiarezza che guadagno in prestazioni.

Altri suggerimenti

Il modo più semplice di fare questo (anche se non il più veloce) sarebbe probabilmente alla prima sprintf il numero di un buffer di stringa, e quindi scorrere il buffer printf - ing un carattere e uno spazio alla volta.

Non c'è modo integrato di fare questo entro la formattazione printf standard.

Un metodo comune sarebbe quello di estrarre ogni cifra, e quindi stampare quella cifra. Io non ti darò il codice, ma è la versione implementata di:

int d; // your number

/* While `d` is not zero */
/* Modulus `d` with 10 to extract the last digit */
/* Print it, with your space */
/* Divide by 10 to remove the last digit */
/* Repeat */

Questa sarà all'indietro. Lascio come esercizio a voi per sistemare le cose. (Suggerimento: Nel ciclo, mettere il risultato in un array di caratteri, e quando hai finito inizio all'ultimo indice della matrice e di stampa all'indietro.)


char buffer[50];
int myNum = 123456;
int n;
int i;

n = snprintf(buffer, sizeof buffer, "%d", myNum);

for (i = 0; i < n; i++)
{
    putchar(buffer[i]);
    putchar(' ');
}

putchar('\n');
int number = 123456;
char strNumber[64];
strNumber[0] = '\0';
sprintf_s(strNumber, "%d", number);
int i = 0;
while(strNumber[i] != '\0')
    printf("%c ", strNumber[i++]);

Questo funziona solo per numeri interi senza segno:

#include <stdio.h>
#include <math.h>

void print_number(unsigned int number) {
    int n = number, c = 0, p;
    while (n > 0) {
        n /= 10;
        c++;
    }
    for (n = c - 1; n >= 0; n--) {
        p = pow(10, n);
        printf("%d ", number / p);
        number -= number / p * p;
    }
    printf("\n");
}


int main(int argc, char *argv[]) {
    print_number(1);
    print_number(12);
    print_number(123);
    print_number(1234);
    print_number(12345);
    print_number(1234567);
    print_number(12345678);
    print_number(123456789);
    return 0;
}
#include <stdio.h>
int main ()
{
    int a, b, c, d, e;
    printf("Write a number of four figures\n");
    scanf("%d", &a);
    printf("Your number is:\n");

    b = (a - (a % 1000)) / 1000;
    c = ((a - (a % 100)) / 100) - b * 10;
    d = ((a - (a % 10)) / 10) - b * 100 - c * 10;
    e = (a - b * 1000 - c * 100 - d * 10);

    printf("%d\t%d\t", b, c);
    printf("%d\t", d);
    printf("%d", e);

    return 0;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top