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