سؤال

أنا أبحث عن خوارزمية لجمع الأرقام. اسمحوا لي أن أوضح المبدأ الأساسي:

قل أن لديك رقم: 18268.

1 + 8 + 2 + 6 + 8 = 25

2 + 5 = 7

و 7 هو رقمنا النهائي. إنه يضيف بشكل أساسي كل رقم من الرقم بالكامل حتى نصل إلى رقم واحد (يُعرف أيضًا باسم "Core"). غالبًا ما يستخدمه علماء الأرقام.

أنا أبحث عن خوارزمية (لا يجب أن تكون لغة خاصة) لهذا الغرض. لقد بحثت في 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. تعديل الرقم كله بمقدار 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;
}

لا أعرف كم هو أفضل بكثير ، ولكنه سوف يفسر الأرقام القابلة للقسمة بسهولة 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);
  }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top