somma cifre di un numero

Pubblicità

toni1705

Nuovo Utente
Messaggi
98
Reazioni
9
Punteggio
28
Buongiorno , stamattina stavo creando un metodo di una classe dove bisogna sommare le cifre di un numero.
mi spiego meglio ho il numero 17 e vorrei sommare 1+7=8;
ci sono riuscito ma in parte perchè quando i numeri continuano ad essere di due cifre ovviamente non continua a scomporre ...
JavaScript:
       public int scomposizione( int numerino )
       {
           int resto=0;
           int rema = numerino%10;
           somma+=rema;       

           numerino /= 10;
           if(numerino>10)
               scomposizione(numerino);

           resto= somma+numerino;
      
           return resto; // so che potrei fare la return somma + numerino xD ;
       }
se ho il numero 47 il risultato sarà 11 ma a me serve che somma anche 1+1
 
Oppure riscrivi la ricorsione... Assumendo che tu stia lavorando con numeri interi, puoi fare una cosa del tipo:

Codice:
sumDigits(num: number): number {
    if (num < 10) {
        return num; // se il numero ha una sola cifra, abbiamo finito e ritorniamo
    }

    // prendo l'ultima cifra del numero (vedi note)
    const lastDigit: number = Math.round(((num / 10) % 1) * 10);
  
    // prendo le restanti cifre
    const remainDigits: number = Math.floor(num / 10);

    return this.sumDigits(            // ritorno la somma fra
        lastDigit +                   // l'ultima cifra
        this.sumDigits(remainDigits)  // la somma delle rimanenti cifre
    );
}

Note: te l'ho scritto in un altro linguaggio ma dovresti capirlo ugualmente. La parte forse un po' criptica e' quella per ottenere l'ultima cifra del numero. Puoi farlo in diversi modi (per esempio trasformando in stringa), quello che ti ho riportato io divide il numero per 10, ne fa il modulo 1 per avere la parte dopo la virgola, quindi moltiplica per 10 per avere nuovamente un intero. Nota che quel Math.round() serve ad evitare situazioni "strane" dovute all'approssimazione, finche' lavori solo con interi va bene.
 
Scusa ma non capisco perché se il numero originale è 47 (la cui somma è 11) poi devi sommare anche il risultato (11). Non ha senso. La somma delle cifre del numero 47 è 11, non 2 (che è la somma del numero 11)
 
Scusa ma non capisco perché se il numero originale è 47 (la cui somma è 11) poi devi sommare anche il risultato (11). Non ha senso. La somma delle cifre del numero 47 è 11, non 2 (che è la somma del numero 11)
andrea il tuo ragionamento è giusto
ma per uno sviluppo logico devo continuare a sommare fino a quando non ricevo un solo numero.
 
lo fai o con 2 cicli annidati o con un ciclo e una funzione;
in pratica il ciclo interno (o la funzione) calcola la somma delle cifre del numero (il metodo te l'ha già suggerito @bigendian, conviene usare l'operazione di modulo per avere direttamente la singola cifra fino ad esaurire il numero);
terminato questo calcolo lo si fa controllare dalla condizione del ciclo esterno: se la somma del ciclo interno/funzione è <10 hai finito, altrimenti ripeti il calcolo (cioè di nuovo il while interno o la funzione) sull'ultima somma calcolata
 
Eccomi scusate il ritardo ...
JavaScript:
public int scomposizione( int numerino )
    {
          
        int numero=0;
        int numero1=0;
        int totale=0;
        int x=0;
        int finale=0;
      
       totale=numerino%10;
      
       numerino=numerino/10;
      
       totale=totale+numerino;
       if(totale>=10)
       {
          
         numero1=totale%10;
         totale/=10;
    
          finale= numero1+totale;
                   return finale;
       }
       return totale;
    }
ho risolto così
mettendo in dubbio però la strategia( non so se esiste un metodo più efficace);
 
Codice:
int scomponi(int num) {
    int tot = 0;
    
    while (num) {
        tot += num % 10;
        num /= 10;
    }
    
    return tot;
}
 
Domanda. Su Java Script è possibile richiamare una funzione all'interno della funzione stessa?
Se non ricordo male, almeno su C# non va in stack overflow?

public int scomposizione( int numerino )
{
int resto=0;
int rema = numerino%10;
somma+=rema;

numerino /= 10;
if(numerino>10)
scomposizione(numerino);

resto= somma+numerino;

return resto; // so che potrei fare la return somma + numerino xD ;
}
 
Non è sicuramente JavaScript visto che compaiono i tipi di dato (int). Presumo sia Java. Ricordati di usare il tag CODE la prossima volta che pubblichi del codice (oltre ad essere più leggibile eviti che alcune parti vengano interpretate come BBCode, ad esempio).

Comunque è una funzione (o un metodo nel caso di Java) che fa uso della ricorsione. Per altro non è proprio corretto, così a occhio (il valore che torna dalla chiamata ricorsiva lo scarti).
 
Non è sicuramente JavaScript visto che compaiono i tipi di dato (int). Presumo sia Java. Ricordati di usare il tag CODE la prossima volta che pubblichi del codice (oltre ad essere più leggibile eviti che alcune parti vengano interpretate come BBCode, ad esempio).

Comunque è una funzione (o un metodo nel caso di Java) che fa uso della ricorsione. Per altro non è proprio corretto, così a occhio (il valore che torna dalla chiamata ricorsiva lo scarti).

Hai ragione.
Facevo in ogni caso probabilmente meglio a quotare il messaggio.
Che fosse Js lo deducevo, l'utente lo ha scritto in cima al codice (e non conosco Js).
 
Hai ragione.
Facevo in ogni caso probabilmente meglio a quotare il messaggio.
Che fosse Js lo deducevo, l'utente lo ha scritto in cima al codice (e non conosco Js).

Ah... avevo questo come ultimo messaggio da leggere, pensavo fosse del tuo codice, non essendo quotato. Per questo ho risposto così ?
 
Pubblicità
Pubblicità
Indietro
Top