somma cifre di un numero

toni1705

Nuovo Utente
98
9
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
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Usa un while e cicla finchè il numero ha più di 1 cifra
 

icox

Utente Attivo
497
246
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.
 
  • Mi piace
Reazioni: toni1705
U

Utente cancellato 371741

Ospite
oppure semplicemente usando x = n % 10; n /= 10 in un piccolo loop 4 righe, senza tanto cargo-cult
 
  • Mi piace
Reazioni: rodhellas

Andretti60

Utente Èlite
6,440
5,091
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)
 
  • Mi piace
Reazioni: toni1705

toni1705

Nuovo Utente
98
9
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.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,668
11,452
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
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
 

toni1705

Nuovo Utente
98
9
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);
 
U

Utente cancellato 371741

Ospite
Codice:
int scomponi(int num) {
    int tot = 0;
    
    while (num) {
        tot += num % 10;
        num /= 10;
    }
    
    return tot;
}
 

Fenzo

Nuovo Utente
59
5
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 ;
}
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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).
 
  • Mi piace
Reazioni: Mursey

Fenzo

Nuovo Utente
59
5
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).
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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ì ?
 

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili