somma cifre di un numero

toni1705

Nuovo Utente
77
5
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,518
425
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
395
175
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.
 
  • Like
Reactions: toni1705

bigendian

Utente Attivo
214
103
OS
Linux forever, freedom
oppure semplicemente usando x = n % 10; n /= 10 in un piccolo loop 4 righe, senza tanto cargo-cult
 
  • Like
Reactions: rodhellas

Andretti60

Utente Èlite
3,969
2,680
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)
 
  • Like
Reactions: toni1705

toni1705

Nuovo Utente
77
5
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
5,106
2,211
CPU
Neurone solitario
Dissipatore
Ventaglio azionato a mano
Scheda Madre
Casalinga
RAM
Molto molto volatile
GPU
Binoculare integrata nel cranio
PSU
Pastasciutta, pollo e patatine al forno
Net
Segnali di fumo e/o tamburi
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
77
5
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);
 

bigendian

Utente Attivo
214
103
OS
Linux forever, freedom
Codice:
int scomponi(int num) {
    int tot = 0;
    
    while (num) {
        tot += num % 10;
        num /= 10;
    }
    
    return tot;
}
 

Fenzo

Nuovo Utente
7
0
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

Utente Attivo
893
556
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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).
 
  • Like
Reactions: Mursey

Fenzo

Nuovo Utente
7
0
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

Utente Attivo
893
556
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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ì ?
 

Entra

oppure Accedi utilizzando

Hot: PS5 VS XBOX X/S?

  • Playstation 5

    Voti: 296 63.5%
  • XBOX Series X/S

    Voti: 170 36.5%

Discussioni Simili