English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا البرنامج، ستتعلم كيفية استخدام حلقات for و while في Java للبحث عن عامل عدد.
عامل الموجب يتكون من الصيغة التالية: n
عامل الموجب (n!) = 1 * 2 * 3 * 4 * ... * n
public class Factorial { public static void main(String[] args) { int num = 10; long factorial = 1; for(int i = 1; i <= num; ++i) { // factorial = factorial * i; factorial *= i; } System.out.printf("عامل %d = %d ", num, factorial); } }
عند تشغيل هذا البرنامج، الناتج هو:
عامل 10 = 3628800
في هذا البرنامج، نستخدم حلقة for لتدوير جميع الأرقام بين 1 وعدد المحدد num (10)، وكل منتج حتى num يتم تخزينه في متغير factorial.
نستخدم long بدلاً من int لتخزين القيم الكبيرة لعامل، ولكنها ليست كافية لتخزين قيم أكبر (مثل عامل 100)
للبحث عن النتائج التي لا يمكن تخزينها في متغير long، نستخدم متغير BigInteger المعلن في مكتبة java.math.
import java.math.BigInteger; public class Factorial { public static void main(String[] args) { int num = 30; BigInteger factorial = BigInteger.ONE; for(int i = 1; i <= num; ++i) { // factorial = factorial * i; factorial = factorial.multiply(BigInteger.valueOf(i)); } System.out.printf(" %d عامل = %d ", num, factorial); } }
عند تشغيل هذا البرنامج، الناتج هو:
عامل 30 = 265252859812191058636308480000000
في هذا المكان، نستخدم BigInteger بدلاً من long لتخزين القيمة المثلثية.
بسبب أن * لا يمكن استخدامه مع BigInteger، لذا نستخدم multiply() لهذا المنتج. بالإضافة إلى ذلك، يجب تحويل num إلى BigInteger بشكل قسري للقيام بالضرب.
لأن * لا يمكن استخدامه مع BigInteger، لذا نستخدم multiply() لل حساب. بالإضافة إلى ذلك، يجب تحويل num إلى BigInteger لتحقيق عملية الضرب.
بالمثل، يمكننا استخدام دورة while لحل هذه المشكلة.
public class Factorial { public static void main(String[] args) { int num = 5, i = 1; long factorial = 1; while(i <= num) { factorial *= i; i++; } System.out.printf("%d! = %d", num, factorial); } }
عند تشغيل هذا البرنامج، الناتج هو:
5! = 120
في البرنامج المذكور أعلاه، بخلاف الدورة for، يجب علينا زيادة قيمة i داخل الدورة.
على الرغم من أن كلا البرنامجين تقنياً صحيحين، إلا أن من الأفضل استخدام دورة for في هذه الحالة. لأن عدد التكرارات (أقصاها num) معروف.