سؤال

لنفترض اثنين من الأعداد الصحيحة X و N.

أحاول تحديد كيفية إنشاء خوارزمية من شأنها أن تعيد عددًا صحيحًا من القيمة x المتكررة n.

لذلك إذا كان X 9 و N كان 4 ، فإن المعادلة ستعود 9999.
وإذا كان X 9 و N كان 5 ، فإن المعادلة ستعود 99999. (مئوية م)

آمل ألا يكون هذا سخيفًا تمامًا أو خارج المكان. قون

هل كانت مفيدة؟

المحلول

لاحظ أن X عبارة عن عدد صحيح وليس من الضروري أن يكون رقمًا من رقمين في نظام BASE-10. ماذا لو n = 3 و x = 12؟ ثم يجب أن يكون الجواب 121212.

هذا هو الحل: نحن بحاجة إلى الطول p من الرقم X في نظام BASE-10. يترك p = floor(lg(x)+1). الرقم الذي نبحث عنه هو x + x*10^p + x*10^2p + ... + x*10^(N-1)p. هذا هو x * (10^(pN) - 1) / (10^p - 1).

نصائح أخرى

هذا يعمل بالنسبة لي: (10^n-1)/9*x

هذا يبدو وكأنه سؤال برمجة أكثر ، لأن الحل يعتمد اعتمادًا كبيرًا على نظام الأرقام الأساسي 10. ستكون الخوارزمية للقيام بذلك مجرد حلقة بسيطة على N والتي تضاعف الرقم السابق ويضيف X.

int foo(int x, int N) {
  int result = 0;
  for(i=0; i<N; i++) {
    result *= 10;
    result += x;
  }
  return result;
}

كود مزيف:

Procedure Construct takes x:integer N:integer
begin
   take a variable Result and initialize with 0;
   For N times Do
   begin
      Result <- Result * 10
      Result <- Result + x
   end
end

مثال C ++:

int main()
{
   const int x = 9, N = 5;
   int Result = 0;
   for(int i = 0; i < N; ++i)
   {
      Result*=10;
      Result+=x;   
   }
   //use result here
}

فقط لأكون مختلفًا بعض الشيء ، لقد صنعت جافا سكريبت مع هذه الوظيفة العودية:

function repeating(x, n){
    return (n) ? (x * Math.pow(10,n-1)) + repeating(x, n-1) : 0;
};

كمان: http://jsfiddle.net/szkeb/2/

إنه يعمل للخلف من N ، لذلك سيتم حسابه بشكل أساسي 9000 + 900 + 90 + 9 + 0 = 9999

في بيثون ، هذا سهل للغاية:

def repeat(x, N):
    return int(str(x) * N)

يبدو أنك تحاول بناء سلسلة من الأرقام المتكررة أكثر من القيام بالرياضيات الفعلية. لماذا لا تفعل ما يلي (ج#)؟

using System;
using System.Text;

public int CreateInt(int x, int N)
{
    StringBuilder createdString = new StringBuilder();
    int createdInt;

    for (int i = 0; i < N; i++)
        createdString.Append(x.ToString());

    if (!int.TryParse(createdString.ToString(), out createdInt))
        throw new Exception(string.Format("Value x ({0}) repeated N ({1}) times makes {2}.  This is not a valid integer.", x, N, createdString));

    return createdInt;
}

int createdInt1 = CreateInt(7, 5);  // output: 77777
int createdInt2 = CreateInt(14, 4); // output: 14141414
int createdInt3 = CreateInt(1, 20); // output: throws exception "Value x (1) repeated N (20) times makes 11111111111111111111.  This is not a valid integer."

تعرض هذه العينة بعض الأشياء التي تريد أن تراقبها:

  1. هل النتيجة التي تم إنشاؤها عدد صحيح صحيح لأي لغة تقوم فيها برمجة؟
  2. ماذا لو كان عدد صحيح لتكرار (x) أرقامًا مزدوجة أو أعلى؟

رمز الزائفة لمتابعة. جوهر هذا هو أنك ستحسب إلى N وفي كل مرة تعول عليك طباعة X الخاص بك

for(int i=1; i <=x ; i++)
{
 system.print("n");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top