2010-04-21 28 views
11

Estoy buscando un algoritmo para la suma de dígitos. Permítanme esbozar el principio básico:Algoritmo para la suma de dígitos?

Digamos que tiene un número: 18268.

1 + 8 + 2 + 6 + 8 = 25 

2 + 5 = 7 

Y 7 es nuestro número final. Básicamente, se está sumando cada número del número entero hasta que lleguemos a un solo dígito (también conocido como 'núcleo'). A menudo es usado por numerólogos.

Estoy buscando un algoritmo (no tiene que ser el idioma en específico) para esto. He buscado en Google durante la última hora con términos como digit sum algorithm y otras cosas, pero no obtuve resultados adecuados.

Cualquier ayuda sería genial, gracias.

+0

¿deberes? ¿En qué has pensado hasta ahora? – Anycorn

+0

Vea también: http://stackoverflow.com/questions/478968/sum-of-digits-in-c –

+0

No, no deberes. Aunque puedo ver cómo lo confundirías. Lo más difícil que hacemos en la universidad con la programación es el manejo de archivos. : P – Joe

Respuesta

29

Debido a 10-1 = 9, un poco de teoría de números le dirá usted que la respuesta final se acaba mod n 9. Esto es código:

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

Ejemplo: 18268 9% es 7. (véase también:. Casting out nines)

+0

necesito recorrerlo – Timmy

+3

No, puedes solucionarlo. – Larry

+2

@Timmy: No, no necesita hacer un ciclo. Obtenga bolígrafo y papel, y resuélvalos usted mismo. (Funciona porque la suma de dígitos es un módulo invariante 9.) – ShreevatsaR

3

me gustaría probar esto:

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

, querrá hacer esto una y otra vez hasta que abs (total) sea menor que 10 y luego tendrá tu número central – Chad

+0

que no parece correcto. estás haciendo solo una sumatoria necesita otro ciclo o recursión – Anycorn

1
  1. Mod el número entero por
  2. 10.
  3. añadir el número a una matriz.
  4. Agregue la matriz completa.
+1

+1 para proporcionar un buen punto de partida pero no hacer los deberes del OP. –

+0

No es tarea, Bob.:) Y gracias por el punto de partida, puedo trabajar en la cabeza hacia dónde va;) – Joe

2

No funciona con números negativos, pero no sé cómo lo manejaría de todos modos. También puede cambiar f(x) a ser iterativo:

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

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

También puede tomar ventaja de la teoría de números, que le da este 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

esto es desde hace un tiempo muy largo, pero la mejor solución que tengo para esto es:

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

no sé cuánto mejor es esto, pero va a dar cuenta de la divisible por 9 números fácilmente. Solo un algoritmo genial.

Cuestiones relacionadas