我正在寻找一种算法以进行数字求和。让我概述基本原则:

说你有一个数字: 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
  1. mod整个数字乘以10。
  2. 将数字添加到数组中。
  3. 添加整个数组。
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;
}

我不知道这有多好,但是它可以轻松地解释可分解的数字。只是一个很酷的算法。

    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);
  }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top