Алгоритм суммирования цифр? - PullRequest
12 голосов
/ 22 апреля 2010

Я ищу алгоритм суммирования цифр. Позвольте мне изложить основной принцип:

Скажем, у вас есть номер: 18268.

1 + 8 + 2 + 6 + 8 = 25

2 + 5 = 7

И 7 - наш последний номер. Это в основном добавление каждого числа целого числа, пока мы не перейдем к одной (также называемой «основной») цифре. Он часто используется нумерологами.

Я ищу алгоритм (не обязательно для конкретного языка) для этого. Я искал в Google последний час с такими терминами, как digit sum algorithm и так далее, но не получил подходящих результатов.

Ответы [ 8 ]

31 голосов
/ 22 апреля 2010

Поскольку 10-1 = 9, небольшая теория чисел скажет вам, что окончательный ответ - просто n mod 9. Вот код:

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

Пример: 18268% 9 равно 7. (Также см .: Изгнание девяток .)

3 голосов
/ 22 апреля 2010

Я бы попробовал это:

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;
}
2 голосов
/ 22 апреля 2010

Не работает с отрицательными числами, но я не знаю, как бы вы справились с этим в любом случае. Вы также можете изменить f(x) на итеративный:

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

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

Вы также можете воспользоваться теорией чисел, дав вам f(x):

f( x ) =
    if ( x == 0 ) return 0
    return x % 9
1 голос
/ 22 апреля 2010
  1. Мод целое число на 10.
  2. Добавить номер в массив.
  3. Добавить весь массив.
0 голосов
/ 18 декабря 2018
public int DigitSum(long n)
  {
     return (int)(1 + (n - 1) % 9);
  }
0 голосов
/ 27 августа 2018
    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;
}
0 голосов
/ 12 октября 2016

это очень давно, но лучшее решение, которое у меня есть для этого:

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

Я не знаю, насколько это лучше, но это будет легко делиться на 9 чисел. Просто классный алгоритм.

0 голосов
/ 22 апреля 2010
int number = 18268;
int total = 0;

while(number > 0)
{
   total += number % 10;
   total = total%10;
   number /= 10;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...