Frage

Ich bin für einen Algorithmus für Digit Summieren der Suche. Lassen Sie mich das Grundprinzip skizzieren:

Angenommen, Sie haben eine Zahl: 18268

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

2 + 5 = 7

Und 7 ist unsere letzte Nummer. Es ist im Grunde das Hinzufügen jede Zahl der Gesamtzahl, bis wir zu einem einzigen runter Ziffer (auch als ‚Kern‘ bezeichnet). Es wird oft von numerologists verwendet.

Ich bin für einen Algorithmus der Suche (nicht über die Sprache sein, in spezifisch) dafür. Ich habe gesucht Google für die letzte Stunde mit Begriffen wie digit sum algorithm und so weiter bekam aber keine geeigneten Ergebnisse.

War es hilfreich?

Lösung

Weil 10-1 = 9, eine wenig Zahlentheorie werden Ihnen sagen, dass die endgültige Antwort ist einfach n mod 9. Hier der Code:

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

Beispiel: 18268% 9 7. (Siehe auch: Casting aus Neunen .)

Andere Tipps

Ich würde versuchen, diese:

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

funktioniert nicht mit negativen Zahlen, aber ich weiß nicht, wie du es sowieso umgehen würde. Sie können auch f(x) ändern iterative zu sein:

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

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

Sie können auch die Vorteile der Zahlentheorie nehmen, können Sie diese f(x) geben:

f( x ) =
    if ( x == 0 ) return 0
    return x % 9
  1. Mod die ganze Zahl von 10.
  2. Fügen Sie die Nummer zu einem Array.
  3. Fügen Sie das gesamte Array.
int number = 18268;
int total = 0;

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

Dies ist von einem wirklich lange her, aber die beste Lösung, die ich für diese haben, ist:

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

Ich weiß nicht, wie viel besser das ist, aber es wird leicht von 9 Zahlen für die teilbar zu berücksichtigen. Nur ein kühler Algorithmus.

    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);
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top