java - برنامج جافا لمخرجات غير صحيحة فاكتوريال




eclipse vbscript (4)

أنت لا تخزن الضرب السابق في متغير آخر و n الخاص بك هو دائما زيادة حتى الشرط في ل i يتغير كل التكرار.

بدلا من ذلك يمكن أن يكون لديك متغير منفصل لعقد factorial الخاصة بك.

class FactorialExample{  
 public static void main(String args[]){  
  int i,fact=1;  
  int number=5;//It is the number to calculate factorial    
  for(i=1;i<=number;i++){    
      fact=fact*i;    
  }    
  System.out.println("Factorial of "+number+" is: "+fact);    
 }  
} 


امل ان يساعد.

أنا تنفيذ قطعة أدناه من جافا رمز في إكليبس إيد.

public class Programs {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i, num, n;
        n = 6;
        // num=n-1;
        for (i = 1; i <= n - 1; i++) {
            n = n * i;
        }
        System.out.println("Factorial of the declared number is" + " " + n);
    }

}

فإنه يظهر الإخراج كما -1420957696. التعليمات البرمجية يعمل بشكل جيد إذا أنا أونكومنت واستخدام المتغير "الأسطوانات" في ل لوب. أعتقد في كل تكرار قيمة n التغييرات تدريجيا بشكل لا يصدق بالمقارنة مع قيمة i . نفس الرمز يعمل بشكل جيد في فسكريبت (انظر أدناه). هل يمكن لأي شخص أن يفسر الفرق؟

Option Explicit
Dim  i, num
num = InputBox("enter a number")
For i=1 To num-1
    num = num * i
Next
MsgBox "The factorial of entered number is: " & num, 3, "Program for factorial"

أنت لا تخزن الضرب السابق في متغير آخر و n الخاص بك هو دائما زيادة حتى الشرط في ل i تغيير كل التكرار.


كما ذكر في إجابات أعلاه تقييم حالة يسبب الاستثناء. ما يمكنك القيام به هو الحفاظ على متغير منفصل للتحقق من حالة في حلقة مثل هذا.

int i,fact=1;  
  int number=5;//Number to calculate factorial    
  for(i=1;i<=number;i++){    
      fact=fact*i;    
  }   

يتم التحقق من كل تكرار في فورلوب i <= n-1. ونظرا لأنه يتم زيادة n طوال الوقت، فسيتم تشغيل الحلقة حتى يصل n إلى أكبر عدد ممكن من إنتيجر ويصبح سالبا.





factorial