Domanda

Sono alla ricerca di un algoritmo per la cifra di somma. Mi permetta di delineare il principio di base:

Diciamo che avete un numero: 18268

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

2 + 5 = 7

E 7 è il nostro numero finale. Si tratta fondamentalmente aggiungendo ogni numero del numero totale fino ad arrivare a una singola (noto anche come 'nucleo') cifre. E 'spesso usato dai numerologi.

Sono alla ricerca di un algoritmo (non deve essere la lingua in-specifico) per questo. Ho cercato di Google per l'ultima ora con termini come digit sum algorithm e quant'altro ma non ottenne risultati utili.

È stato utile?

Soluzione

A causa 10-1 = 9, un po 'di teoria dei numeri vi dirà che la risposta definitiva è solo n mod codice 9. Qui di:

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

Esempio: 18268% 9 è 7. (vedi anche: prova del nove .)

Altri suggerimenti

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

non funziona con i numeri negativi, ma non so come si dovrebbe gestire la cosa in ogni caso. È 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

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

f( x ) =
    if ( x == 0 ) return 0
    return x % 9
  1. Mod il numero intero da 10.
  2. Aggiungi il numero a un array.
  3. Aggiungere l'intero array.
int number = 18268;
int total = 0;

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

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 rappresenterà la divisibile per 9 numeri. Solo un algoritmo di 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);
  }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top