DOMANDA [C] Separare le cifre di un numero intero

Mr. Coder

Nuovo Utente
43
10
Ho appena finito di svolgere un esercizio di programmazione in C che ho trovato in un libro. I risultati che si ottengono sono giusti, però vorrei chiedere lo stesso se il programma che ho scritto è fatto bene oppure no. Esistono altri metodi (anche in maniera ricorsiva) per risolvere tale problema?

Esercizio:
C:
/* Esercizio 5.21
   Scrivete dei segmenti di programma che eseguano ognuno dei seguenti compiti:
   a) Calcolate la parte intera del quoziente ottenuto dalla divisione degli interi a e b.
   b) Calcolate il resto intero ottenuto dalla divisione degli interi a e b.
   c) Utilizzate i pezzi di programma sviluppati in a) e b) per scrivere una funzione che
      prenda in input un intero, compreso tra 1 e 32767, e lo visualizzi come una serie di
      cifre, separando ogni coppia di esse con due spazi. Per esempio, l'intero 4562 dovrà
      essere stampato come:
      4  5  6  2
*/
#include <stdio.h>

/* Prototipi funzione */
int ParteIntera(int a, int b);
int Resto(int a, int b);
void SeparaCifre(int numero);

int main()
{
    int input;

    printf("%d / %d = %d\n", 8, 3, ParteIntera(8, 3));
    printf("%d resto %d = %d\n", 8, 3, Resto(8, 3));

    while(1)
    {
        printf("Inserisci un numero intero compreso tra 1 e 32767: ");
        scanf("%d", &input);

        if(input >= 1 && input <= 32767)
            break;
    }

    SeparaCifre(input);

    return 0;
}

int ParteIntera(int a, int b)
{
    return a / b;
}

int Resto(int a, int b)
{
    return a % b;
}

void SeparaCifre(int numero)
{
    //Determinare il numero di cifre del numero
    int cifre, copia = numero;
    for(cifre = 1; copia / 10 != 0; cifre++)
        copia /= 10;

    //Impostare il divisore a 10^(cifre-1)
    int counter, divisore = 10;
    for(counter = 1; counter < cifre - 1; counter++)
        divisore *= 10;

    //Separare le cifre
    while(divisore != 0)
    {
        if(ParteIntera(numero, divisore) != 0)
            printf("%d  ", ParteIntera(numero, divisore));

        numero = Resto(numero, divisore);
        divisore /= 10;
    }
}
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili