Question

Je cherche un algorithme pour sommer des chiffres. Permettez-moi de décrire le principe de base:

Dites-vous un numéro: 18268

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

2 + 5 = 7

Et 7 est notre dernier numéro. Il est essentiellement l'ajout de chaque numéro du nombre entier jusqu'à ce que nous nous attelons à un seul (aussi connu comme un « noyau ») chiffres. Il est souvent utilisé par numerologists.

Je cherche un algorithme (ne doit pas être dans la langue spécifique) pour cela. J'ai cherché Google pour la dernière heure avec des termes tels que digit sum algorithm et ainsi de suite, mais a obtenu aucun résultat convenable.

Était-ce utile?

La solution

Parce que 10-1 = 9, un peu la théorie des nombres vous diront que la réponse finale est juste n mod 9. Voici le code:

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

Exemple: 18.268% 9 est 7. (voir aussi: Preuve par neuf .)

Autres conseils

Je voudrais essayer ceci:

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

ne fonctionne pas avec des numéros de négatifs, mais je ne sais pas comment vous le traiter de toute façon. Vous pouvez également modifier f(x) être itérative:

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

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

Vous pouvez également profiter de la théorie des nombres, vous donnant ce f(x):

f( x ) =
    if ( x == 0 ) return 0
    return x % 9
  1. Mod le nombre entier de 10.
  2. Ajoutez le numéro à un tableau.
  3. Ajoutez tout le tableau.
int number = 18268;
int total = 0;

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

est d'il y a vraiment beaucoup de temps, mais la meilleure solution que j'ai pour cela est:

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

Je ne sais pas combien mieux cela est, mais il représentera le divisible par 9 numéros. Juste un algorithme cool.

    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);
  }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top