Я ищу алгоритм для подведения итогов Цифры. Позвольте мне обрисовать в общих чертах основной принцип:
Скажите, что у Вас есть число: 18268
.
1 + 8 + 2 + 6 + 8 = 25
2 + 5 = 7
И 7 наше заключительное число. Это в основном добавляет каждое количество целого числа, пока мы не переходим к синглу (также известный как 'ядро') цифра. Это часто используется numerologists.
Я ищу алгоритм (не должен быть язык в-конкретном) для этого. Я искал Google в течение прошлого часа с условиями такой как digit sum algorithm
и этажерка, но не получила подходящих результатов.
Поскольку 10-1 = 9, небольшая теория чисел скажет вам, что окончательный ответ - просто n mod 9. Вот код:
ans = n%9;
if(ans==0 && n>0) ans=9;
return ans;
Пример: 18268% 9 равно 7. (См. Также: Изгнание девяток .)
int number = 18268;
int total = 0;
while(number > 0)
{
total += number % 10;
total = total%10;
number /= 10;
}
Не работает с отрицательными числами, но я не знаю, как бы вы с этим справились. Вы также можете изменить 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
Я бы попробовал следующее:
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;
}