Funzione in C Individuare se il numero sia primo sia numero di Armstrong

di Anonimizzato29959 il
52 risposte

52 Risposte - Pagina 4

  • F33
    Allegati:
    29959_ec60923d098dce35bca52b00b7dd9da5.jpg
    29959_ec60923d098dce35bca52b00b7dd9da5.jpg
  • Guarda che math.h non serve...
    
    int check_Armstrong(int numA){
        int copia_num=numA,sum=0,rem;
        int r, c, cifre = 0;
        
        while(copia_num){
            copia_num/=10;
            cifre++;
        } 
        
        copia_num=numA;
        while(numA){
            rem=numA%10;
            for(r=rem,c=1;c<cifre;c++)
                r*=rem; 
            sum+=r;
            numA/=10;
        }
        
        if(sum==copia_num)
            return 1;
        
        return 0;
    }
    
  • Con la soluzione di Weierstrass funziona. Grazie mille
  • Marco ... non è la soluzione di Weierstrass che è magica ... cerca di comprendere...

    Come hai visto, la funzione pow per 5 elevato a 3 restituisce 124 ed è evidentemente SBAGLIATO (deriva da problemi di arrotondamento ad intero che vengono fatti subito dopo). E' un PROBLEMA della funzione pow della libreria del COMPILATORE che usi, perché con Visual Studio il calcolo è corretto.

    A questo punto, per SUPERARE il problema del compilatore, Weierstrass ha evitato di usare la funzione pow facendo le moltiplicazioni che servono per calcolare la potenza (ad esempio 5*5*5) che, con gli interi, risulta corretto ANCHE con il tuo compilatore. Ed ha evitato il logaritmo con un altro ciclo (era più diretto il logaritmo ma va bene uguale).

    Hai capito?
  • Ma solo io mi sono reso conto che 153 NON è primo?
  • Beh ... eravamo concentrati sull'altra funzione.

    Sicuramente ci sono problemi anche con la prima funzione.

    EDIT
    Sì ... la funzione è sbagliata.
  • E scritta pure con idee strane

    La variabile cont non serve
    Parte con un possibile divisore sbagliato
    E lo incrementa di uno per volta provando così anche divisori pari....


    Molto mal studiata
  • Direi non studiata
Devi accedere o registrarti per scrivere nel forum
52 risposte