كيفية بناء معادلة متكررة؟
سؤال
لنفترض اثنين من الأعداد الصحيحة 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."
تعرض هذه العينة بعض الأشياء التي تريد أن تراقبها:
- هل النتيجة التي تم إنشاؤها عدد صحيح صحيح لأي لغة تقوم فيها برمجة؟
- ماذا لو كان عدد صحيح لتكرار (x) أرقامًا مزدوجة أو أعلى؟
رمز الزائفة لمتابعة. جوهر هذا هو أنك ستحسب إلى N وفي كل مرة تعول عليك طباعة X الخاص بك
for(int i=1; i <=x ; i++)
{
system.print("n");
}