12

数字の合計のアルゴリズムを探しています。基本原則の概要を説明しましょう。

番号があるとします: 18268.

1 + 8 + 2 + 6 + 8 = 25

2 + 5 = 7

そして 7 が最終的な数字です。これは基本的に、1 つの (「コア」とも呼ばれる) 桁になるまで、整数の各数値を追加することです。数秘術師がよく使う言葉です。

このためのアルゴリズムを探しています(言語固有である必要はありません)。過去 1 時間、などの用語で Google を検索しましdigit sum algorithmたが、適切な結果が得られませんでした。

4

8 に答える 8

31

10-1=9 であるため、少しの数論では、最終的な答えは n mod 9 であることがわかります。コードは次のとおりです。

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

例: 18268%9 は 7 です (「9 をキャストする」も参照してください)。

于 2010-04-21T22:12:09.493 に答える
3

私はこれを試してみます:

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;
}
于 2010-04-21T22:08:34.923 に答える
2

負の数では機能しませんが、とにかくどのように処理するかわかりません。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
于 2010-04-21T22:11:42.240 に答える
1
  1. 整数を 10 で Mod します。
  2. 数値を配列に追加します。
  3. 配列全体を追加します。
于 2010-04-21T22:09:04.017 に答える
0

これはかなり前のものですが、これに対する最善の解決策は次のとおりです。

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

これがどれほど優れているかはわかりませんが、9 で割り切れる数は簡単に説明できます。ただのクールなアルゴリズム。

于 2016-10-12T15:07:37.503 に答える
0
int number = 18268;
int total = 0;

while(number > 0)
{
   total += number % 10;
   total = total%10;
   number /= 10;
}
于 2010-04-21T22:14:22.100 に答える