2010-04-21 24 views
11

Sto cercando un algoritmo per la somma delle cifre. Lasciatemi delineare il principio di base:Algoritmo per sommare cifre?

Supponiamo di avere un numero: 18268.

1 + 8 + 2 + 6 + 8 = 25 

2 + 5 = 7 

E 7 è il nostro numero finale. In pratica si aggiunge ogni numero dell'intero numero fino a quando non si ottiene una cifra singola (nota anche come 'core'). È spesso usato dai numerologi.

Sto cercando un algoritmo (non deve essere specifico del linguaggio) per questo. Ho cercato Google per l'ultima ora con termini come digit sum algorithm e quant'altro non ha ottenuto risultati adeguati.

Qualsiasi aiuto sarebbe fantastico, grazie.

+0

compiti a casa? a cosa hai pensato finora? – Anycorn

+0

Vedi anche: http://stackoverflow.com/questions/478968/sum-of-digits-in-c –

+0

No, non fare i compiti. Anche se posso vedere come lo scambieresti. La cosa più difficile che facciamo al college con la programmazione è la gestione dei file. : P – Joe

risposta

29

Perché 10-1 = 9, un po 'di teoria dei numeri vi dirà che la risposta finale è solo n mod 9. Ecco il codice:

ans = n%9; 
if(ans==0 && n>0) ans=9; 
return ans; 

Esempio: 18268% 9 è 7. (vedi anche:. Casting out nines)

+0

bisogno di loop it – Timmy

+3

No, si può lavorare fuori. – Larry

+2

@Timmy: No, non è necessario eseguire il ciclo. Prendi carta e penna e provalo tu stesso. (Funziona perché la somma delle cifre è un modulo invariante 9.) – ShreevatsaR

3

proverei questo:

int number = 18268; 
int core = number; 
int total = 0; 

while(core > 10) 
{ 
    total = 0; 
    number = core; 
    while(number > 0) 
    { 
     total += number % 10; 
     number /= 10; 
    } 

    core = total; 
} 
+0

ti consigliamo di farlo più volte fino a quando abs (totale) è inferiore a 10 e poi avrai il tuo numero principale. – Chad

+0

che non sembra giusto. stai facendo solo una sommatoria. hai bisogno di un altro ciclo o ricorsione – Anycorn

1
  1. Mod il numero intero di 10.
  2. Aggiungere il numero di un array.
  3. Aggiungere l'intero array.
+1

+1 per fornire un buon punto di partenza ma non svolgere i compiti dell'OP. –

+0

Non è compito, Bob.:) E grazie per il punto di partenza, posso lavorare in testa dove sta andando;) – Joe

2

Non funziona con numeri negativi, ma non so come lo gestireste comunque. È inoltre possibile cambiare f(x) essere iterativo:

sum(x) = 
    while ((x = f(x)) >= 10); 
    return x; 

f(x) = 
    if (x >= 10) return f(x/10) + x % 10 
    return x 

È possibile inoltre usufruire di teoria dei numeri, dando questo f(x):

f(x) = 
    if (x == 0) return 0 
    return x % 9 
0
int number = 18268; 
int total = 0; 

while(number > 0) 
{ 
    total += number % 10; 
    total = total%10; 
    number /= 10; 
} 
0

questo è da un sacco di tempo fa, ma la soluzione migliore che ho per questo è:

int digitSum(int num){ 
    if (num < 10) return num; 
    else return (n-1)%9+1; 
} 

Non so quanto meglio è, ma sarà spiegare il divisibile facilmente per 9 numeri. Un semplice algoritmo.