Pregunta

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

Supongamos que tiene un número: 18268

.
1 + 8 + 2 + 6 + 8 = 25

2 + 5 = 7

Y 7 es nuestro número final. Es básicamente la adición de cada número del número total hasta llegar a una sola (también conocido como un 'núcleo') dígitos. A menudo se utiliza por los numerólogos.

Estoy buscando un algoritmo (no tiene que ser en el lenguaje específico) para esto. He buscado en Google durante la última hora de términos tales como digit sum algorithm y todo eso, pero no obtuvo resultados adecuados.

¿Fue útil?

Solución

Debido a 10-1 = 9, un poco de teoría de números le dirá que la respuesta final es sólo mod n código de 9. A continuación:

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

Ejemplo: 18,268% 9 es 7. (Véase también: prueba del nueve .)

Otros consejos

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;
}

No funciona con números negativos, pero no sé cómo manejaría todas maneras. 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
  1. Mod el número entero por 10.
  2. Añadir el número a una matriz.
  3. Añadir a toda la matriz.
int number = 18268;
int total = 0;

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

Esto es de 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. Sólo un algoritmo fresco.

    private static int sum(long number) {
    int sum = 0;
    if (number == 0) {
        return 0;
    }
    do {
        int last = (int) (number % 10);
        sum = (sum + last) % 9;
    } while ((number /= 10) > 0);

    return sum == 0 ? 9 : sum;
}
public int DigitSum(long n)
  {
     return (int)(1 + (n - 1) % 9);
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top