رقم ارمسترونج في برنامج جافا باستخدام حلقة For

⚡ ملخص ذكي

أعداد أرمسترونغ تساوي مجموع أرقامها مرفوعة إلى قوة عدد الأرقام، و Java تقوم البرامج أدناه بفحص قيمة واحدة وإدراج كل رقم من أرقام أرمسترونج الأقل من ألف.

  • 🔘 فريف: بالنسبة لعدد مكون من n خانة، يتم رفع كل خانة إلى القوة n ويتم جمع النتائج معًا.
  • ☑️ مثال عملي: العدد 370 مؤهل لأن 3³ زائد 7³ زائد 0³ يساوي 370 بالضبط.
  • Digiت إكسtracنشوئها: يقوم عامل باقي القسمة بإزالة الرقم الأخير، بينما تقوم عملية القسمة الصحيحة بتقصير العدد في كل مرة.
  • 🧪 برنامجان: يختبر أحدهما قيمة ثابتة قدرها 153، بينما يقوم الآخر بالمرور على كل رقم من 0 إلى 999.
  • 🛠️ الحد المعروف: لا يصلح تكعيب كل رقم إلا للقيم المكونة من ثلاثة أرقام، لذا فإن النطاقات الأوسع تحتاج إلى قوة n.
  • 📊 تعقيد: يعمل كلا البرنامجين في وقت O(d) لكل رقم ويستخدمان ذاكرة إضافية O(1).

رقم أرمسترونج في Java برنامج يستخدم حلقة for

ما هو رقم ارمسترونج؟

في عدد أرمسترونج، مجموع قوى الأرقام الفردية يساوي العدد نفسه.

بعبارة أخرى، المعادلة التالية ستكون صحيحة

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 هي الأعداد المكونة من أربعة أرقام. يُطلق علماء الرياضيات أيضًا على هذه القيم اسم الأعداد النرجسية، لأن كل عدد منها يُعيد إنتاج نفسه من أرقامه.

لنكتب هذا في البرنامج:

كيف تعمل خوارزمية أرقام أرمسترونج

قبل قراءة الكود، من المفيد الاطلاع على العمليات الحسابية التي يكررها كلا البرنامجين. لا تتطلب عملية التحقق سوى ثلاث عمليات: إزالة الرقم الأخير، ورفعه إلى الأس المطلوب، وتقصير العدد بمقدار خانة واحدة.

  1. انسخ المدخلات إلى ملف عمل متغير وبالتالي تبقى القيمة الأصلية للمقارنة النهائية.
  2. خذ الرقم الأخير باستخدام عامل باقي القسمة (modulo). digit = tempNumber % 10.
  3. ارفع ذلك الرقم إلى قوة عدد الأرقام وأضفه إلى المجموع التراكمي.
  4. احذف الرقم الأخير عند إجراء القسمة الصحيحة. tempNumber /= 10.
  5. كرر العملية حتى يصل المتغير العامل إلى 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 في العديد من تمارين المبتدئين، بما في ذلك التحقق من الأعداد الأوليةأطلقت حملة سلسلة فيبوناتشي تدريبات البرنامج والمصفوفة مثل فقاعة الفرز و ترتيب بالإدراج.

الأسئلة الشائعة

نعم. بتكعيب كل رقم نحصل على 27 + 343 + 1، والمجموع يساوي 371، لذا تتكرر القيمة. يطبع برنامج النطاق أعلاه هذه القيمة بجانب 153 و370 و407.

يعكس الاسم الخاصية نفسها: فالعدد مُكوَّن بالكامل من أرقامه، لذا يبدو وكأنه يُعجب بانعكاسه. كلا المصطلحين يصفان القاعدة نفسها، ويُطلق على مجموع قوة الأرقام أحيانًا اسم الثابت الرقمي التام.

هناك ثلاثة أعداد: ١٦٣٤، ٨٢٠٨، و٩٤٧٤. يُرفع كل رقم إلى القوة الرابعة لأن القيمة تتكون من أربعة أرقام. لا تستطيع الشيفرة القائمة على المكعبات اكتشافها، ولهذا السبب يجب أن يتبع الأس عدد الأرقام.

العدد الكامل يساوي مجموع قواسمه الصحيحة، لذا فإن العدد 6 ينطبق عليه هذا التعريف من خلال جمع 1 و2 و3. أما عدد أرمسترونغ فيساوي مجموع قوى أرقامه. لا يوجد أي تشابه حسابي بين التعريفين، ونادراً ما يتطابقان.

تُرجع الدالة Math.pow() قيمة من نوع double، لذا يلزم تحويلها إلى int، مما قد يؤدي إلى أخطاء في التقريب. بالنسبة للمكعب ذي العدد الثابت، فإنّ عملية ضرب الأرقام في عدد صحيح (digit*digit*digit) أسرع وأكثر دقة. لا تُستخدم الدالة Math.pow() إلا عندما يتغير الأس بتغير عدد الأرقام.

نعم. يمكن لدالة مساعدة أن تأخذ القيمة العاملة، وتضيف الرقم الأخير المرفوع إلى مُجمِّع، ثم تستدعي نفسها مع الرقم مقسومًا على 10. وهي سهلة القراءة، على الرغم من أن نسخة الحلقة تتجنب إطارات المكدس الإضافية.

بإمكان المساعدين العصريين إنتاج تمريرة جانبية tracهـ، أعد صياغة الحلقة بلغة بسيطة واقترح حالات استثنائية مثل القيمة 0 أو قيمة سالبة. تحقق من ذلك. trace مقابل مخرجات وحدة التحكم الحقيقية، لأن عمليات الشرح التي تم إنشاؤها تتخطى أحيانًا إحدى التكرارات.

مساعد الطيار جيثب عادةً ما تُكمل الحلقة من اسم الدالة فقط، ولكنها غالبًا ما تُضمّن المكعب بشكل ثابت. حدد عدد الأرقام المطلوب في الموجه، ثم قم بتجميع البرنامج واختبار الاقتراح قبل اعتماده.

تلخيص هذه التدوينة بـ: