رقم ارمسترونج في برنامج جافا باستخدام حلقة For
⚡ ملخص ذكي
أعداد أرمسترونغ تساوي مجموع أرقامها مرفوعة إلى قوة عدد الأرقام، و Java تقوم البرامج أدناه بفحص قيمة واحدة وإدراج كل رقم من أرقام أرمسترونج الأقل من ألف.
ما هو رقم ارمسترونج؟
في عدد أرمسترونج، مجموع قوى الأرقام الفردية يساوي العدد نفسه.
بعبارة أخرى، المعادلة التالية ستكون صحيحة
xy..z = xn + yn+.....+ zn
n هو عدد الأرقام في العدد
على سبيل المثال، هذا رقم أرمسترونج مكون من 3 أرقام
370 = 33 + 73 + 03 = 27 + 343 + 0 = 370
أمثلة على أرمسترونج Numbers
0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.
كل قيمة من خانة واحدة من 0 إلى 9 تُحقق القاعدة بسهولة، لأن أي عدد من خانة واحدة مرفوعًا للأس واحد يُعيد نفسه. المجموعة الكاملة لأعداد أرمسترونغ المكونة من ثلاثة أرقام هي 153، 370، 371، و407، بينما 1634، 8208، و9474 هي الأعداد المكونة من أربعة أرقام. يُطلق علماء الرياضيات أيضًا على هذه القيم اسم الأعداد النرجسية، لأن كل عدد منها يُعيد إنتاج نفسه من أرقامه.
لنكتب هذا في البرنامج:
كيف تعمل خوارزمية أرقام أرمسترونج
قبل قراءة الكود، من المفيد الاطلاع على العمليات الحسابية التي يكررها كلا البرنامجين. لا تتطلب عملية التحقق سوى ثلاث عمليات: إزالة الرقم الأخير، ورفعه إلى الأس المطلوب، وتقصير العدد بمقدار خانة واحدة.
- انسخ المدخلات إلى ملف عمل متغير وبالتالي تبقى القيمة الأصلية للمقارنة النهائية.
- خذ الرقم الأخير باستخدام عامل باقي القسمة (modulo).
digit = tempNumber % 10. - ارفع ذلك الرقم إلى قوة عدد الأرقام وأضفه إلى المجموع التراكمي.
- احذف الرقم الأخير عند إجراء القسمة الصحيحة.
tempNumber /= 10. - كرر العملية حتى يصل المتغير العامل إلى 0، ثم قارن المجموع التراكمي بالرقم الأصلي.
يؤدي تكرار هذه الخطوات على مدى 153 إلى tracانظر أدناه. يقوم البرنامج الأول بطباعة كل قيمة في الجدول، لذا يمكن مطابقة المخرجات سطرًا بسطر أثناء تعلم الحلقة.
| تجاوز | رقم مؤقت | أرقام | مجموع مكعب الأرقام |
| 1 | 153 | 3 | 27 |
| 2 | 15 | 5 | 152 |
| 3 | 1 | 1 | 153 |
| خروج | 0 | - | العدد 153 يساوي 153، لذا فإن 153 هو عدد أرمسترونغ |
أحد القيود المهمة. كلا البرنامجين يضربان الرقم في نفسه ثلاث مرات، وهو الأس الصحيح فقط عندما يتكون المدخل من ثلاثة أرقام بالضبط. القاعدة العامة هي رفع كل رقم إلى الأس n، حيث n هو عدد الأرقام، لذا فإن قيمة مكونة من أربعة أرقام مثل 8208 تحتاج إلى الأس الرابع، ولن يتمكن البرنامج القائم على التكعيب من اكتشافها. إن عد الأرقام أولاً ثم رفع كل رقم إلى ذلك الأس هو ما يحول الروتين إلى اختبار عام.
بعد أن تصبح العمليات الحسابية واضحة، يقوم البرنامج الأول بتطبيقها على قيمة ثابتة واحدة.
Java برنامج للتحقق من كون الرقم هو رقم ارمسترونج
تقوم الفئة أدناه بتخزين المرشح في inputArmstrongNumber ويطبع المتغيرات العاملة في كل دورة، مما يجعل Java حلقة يسهل متابعتها في وحدة التحكم.
//ChecktempNumber is Armstrong or not using while loop package com.guru99; public class ArmstrongNumber { public static void main(String[] args) { int inputArmstrongNumber = 153; //Input number to check armstrong int tempNumber, digit, digitCubeSum = 0; tempNumber = inputArmstrongNumber; while (tempNumber != 0) { /* On each iteration, remainder is powered by thetempNumber of digits n */ System.out.println("Current Number is "+tempNumber); digit =tempNumber % 10; System.out.println("Current Digit is "+digit); //sum of cubes of each digits is equal to thetempNumber itself digitCubeSum = digitCubeSum + digit*digit*digit; System.out.println("Current digitCubeSum is "+digitCubeSum); tempNumber /= 10; } //check giventempNumber and digitCubeSum is equal to or not if(digitCubeSum == inputArmstrongNumber) System.out.println(inputArmstrongNumber + " is an Armstrong Number"); else System.out.println(inputArmstrongNumber + " is not an Armstrong Number"); } }
قم بتجميع وتشغيل الفئة من جذر المشروع. لأن الملف يُعلن package com.guru99يجب أن يوضع في مكان مطابق com/guru99 المجلد، أو يُبلغ وقت التشغيل عن خطأ "الفئة غير موجودة". تغيير القيمة في inputArmstrongNumber كل ما يلزم هو خط واحد لاختبار مرشح آخر.
الناتج
Current Number is 153 Current Digit is 3 Current digitCubeSum is 27 Current Number is 15 Current Digit is 5 Current digitCubeSum is 152 Current Number is 1 Current Digit is 1 Current digitCubeSum is 153 153 is an Armstrong Number
يُعد فحص قيمة واحدة في كل مرة مفيدًا لـ tracing، ولكن نفس المنطق يتوسع ليشمل نطاقًا كاملاً عن طريق الالتفافping ضعها في حلقة خارجية.
Java برنامج طباعة ارقام ارمسترونج من 0 الى 999
يحتفظ الإصدار الثاني بنفس المكونات الداخلية while ويضيف حلقة for حلقة تتبع النطاق. لاحظ أن digitCubeSum تتم إعادة ضبطها إلى 0 في بداية كل تمريرة، وهي التفاصيل التي ينساها معظم المبتدئين.
//ChecktempNumber is Armstrong or not using while loop package com.guru99; public class ArmstrongNumber { public static void main(String[] args) { int tempNumber, digit, digitCubeSum; for (int inputArmstrongNumber = 0; inputArmstrongNumber < 1000; inputArmstrongNumber++) { tempNumber = inputArmstrongNumber; digitCubeSum = 0; while (tempNumber != 0) { /* On each iteration, remainder is powered by thetempNumber of digits n */ digit = tempNumber % 10; //sum of cubes of each digits is equal to thetempNumber itself digitCubeSum = digitCubeSum + digit * digit * digit; tempNumber /= 10; } //check giventempNumber and digitCubeSum is equal to or not if (digitCubeSum == inputArmstrongNumber) System.out.println(inputArmstrongNumber + " is an Armstrong Number"); } } }
الناتج
0 is an Armstrong Number 1 is an Armstrong Number 153 is an Armstrong Number 370 is an Armstrong Number 371 is an Armstrong Number 407 is an Armstrong Number
تتوقف القائمة عند 1 بدلاً من الاستمرار إلى 9 لأن مكعب رقم واحد يطابق الرقم نفسه فقط بالنسبة لـ 0 و 1. رفع كل رقم إلى قوة عدد الأرقام بدلاً من ذلك سيعيد جميع القيم العشر المكونة من رقم واحد، وهو نفس التعميم الموصوف سابقًا.
كلا القائمتين قصيرتان بما يكفي للمقارنة، لذا فإن تكلفة هذا النهج تستحق التوضيح بشكل صريح.
تعقيد الوقت والمكان لبرنامج أرمسترونج العددي
تقوم الحلقة الداخلية بتقسيم المتغير العامل على 10 في كل دورة، لذا فهي تُنفذ مرة واحدة لكل رقم بدلاً من مرة واحدة لكل جزء من العدد. هذا يجعل عملية التحقق من القيمة الواحدة سريعة للغاية، وتبقى سريعة حتى مع ازدياد حجم المدخلات.
| البرنامج | تعقيد الوقت | تعقيد الفضاء |
| اختر رقمًا واحدًا | O(d)، حيث d هو عدد الأرقام | يا (1) |
| مسح نطاق من الأرقام N | O(N × d) | يا (1) |
لأن d يساوي log10(الرقم) بعد تقريبه لأعلى، يكون الفحص الفردي لوغاريتميًا فعليًا بالنسبة للقيمة التي يتم اختبارها. ثلاثة فقط int لا يتم تخصيص المتغيرات مطلقًا، ولا يتم إنشاء أي مصفوفة أو مجموعة، ولهذا السبب تظل تكلفة المساحة ثابتة بغض النظر عن حجم النطاق.
يترتب على ذلك ملاحظتان عمليتان. أولاً، يهيمن العدد N على مسح النطاق، لذا فإن طباعة أعداد أرمسترونغ حتى مليون تكلف حوالي ألف ضعف تكلفة طباعتها حتى ألف. ثانياً، int يحدث تجاوز للعدد 2,147,483,647، لذا فإن البحث عبر نطاقات واسعة جدًا يتطلب long لكل من المرشح والمجموع التراكمي. نفس الرقم - مثالtracيظهر نمط tion في العديد من تمارين المبتدئين، بما في ذلك التحقق من الأعداد الأوليةأطلقت حملة سلسلة فيبوناتشي تدريبات البرنامج والمصفوفة مثل فقاعة الفرز و ترتيب بالإدراج.
