2016-06-30 15 views
3

Wenn ich die Nummer 6 zur Berechnung der Fakultät eingabe, wird 30 zurückgegeben (was falsch ist).Berechnen des Faktors einer Zahl

Warum produziert mein Programm falsche Ausgaben?

using System; 

namespace Scenario1_2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int counter, number, fact; 

      Console.WriteLine("Please enter the number you wish to factorize"); 
      number = int.Parse(Console.ReadLine()); 
      fact = number; 

      for (counter = number - 1; counter >= 1; counter--) 
      { 
       fact = fact * counter; 

       Console.WriteLine("The number you entered was {0} and it's factorial is {1}", number, fact); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 
+3

Bewegen Sie Console.WriteLine und Readline- außerhalb der Schleife. Das oder drücken Sie weiter, bis Sie die Antwort erhalten. –

+0

Oh ich sehe! Vielen Dank, das macht Sinn! – WarriorPrincessM

+0

versuchen [dies] (https://dotnetfiddle.net/thhGTa) –

Antwort

1

Das Programm wartet auf einige Eingaben. Sie müssen die zweite Console.ReadLine() aus der Schleife verschieben. Und wahrscheinlich die Console.WriteLine(), es sei denn, Sie möchten, dass jede Iteration abgeschlossen wird.

-1

warum drucken Sie die Mitteilung innerhalb der loop.put außerhalb der Schleife es

Console.WriteLine("The number you entered was {0} and it's factorial is {1}", number, fact); 
0

Sie benötigen zwei Zeilen aus dem for Schleife heraus zu bewegen. Der modifizierte Code sieht so aus.

using System; 

namespace Scenario1_2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int counter, number, fact; 

      Console.WriteLine("Please enter the number you wish to factorize"); 
      number = int.Parse(Console.ReadLine()); 
      fact = number; 

      for (counter = number - 1; counter >= 1; counter--) 
      { 
       fact = fact * counter; 
      } 
      Console.WriteLine("The number you entered was {0} and it's factorial is {1}", number, fact); 
      Console.ReadLine(); 
     } 
    } 
} 

Es gibt viele Möglichkeiten, Factorial zu berechnen. Sie können dies auch tun, indem Sie eine rekursive Funktion erstellen. Google kann Ihnen bei diesen grundlegenden Dingen sehr helfen. Danke!

6

Sie sehen neu in die Programmierung oder mindestens C#, so nur zum Spaß, das wird dein Geist wehen:

using System; 

namespace Scenario1_2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Please enter the number you wish to factorize"); 
      int number = int.Parse(Console.ReadLine()); 
      Console.WriteLine("The number you entered was {0} and it's factorial is {1}", number, Factorial(number)); 
      Console.ReadKey(true); 
     } 

     static int Factorial(int n) 
     { 
      if (n >= 2) return n * Factorial(n - 1); 
      return 1; 
     } 
    } 
} 

Keine überall Schleifen und die Funktion calls itself.

Sie können es auch tun, wie folgt aus:

using System; 

namespace Scenario1_2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Please enter the number you wish to factorize"); 
      int number = int.Parse(Console.ReadLine()); 
      Console.WriteLine("The number you entered was {0} and it's factorial is {1}", number, Factorial(number)); 
      Console.ReadKey(true); 
     } 

     static int Factorial(int n) 
     { 
      return Enumerable.Range(1, n).Aggregate((i, r) => r * i); 
     } 
    } 
} 

die alle Arten von verkorkste :) ... aber es macht die wichtige Arbeit bekommen bis auf eine einzige Zeile Code.

Dann ist da noch mein persönlicher Favorit, die unendliche enumerable:

using System; 

namespace Scenario1_2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Please enter the number you wish to factorize"); 
      int number = int.Parse(Console.ReadLine()); 
      Console.WriteLine("The number you entered was {0} and it's factorial is {1}", number, Factorials().Skip(number-1).First()); 
      Console.ReadKey(true); 
     } 

     static IEnumerable<int> Factorials() 
     { 
      int n = 1, f = 1; 
      while (true) yield return f = f * n++; 
     } 
    } 
} 
+0

Wow, vielen Dank für die erstaunlichen Beispiele! Studieren sie gab mir einige wichtige Erkenntnisse. Es hat mir auch geholfen, die Rekursion besser zu verstehen! Ich kann dir nicht genug danken !! – WarriorPrincessM

-1
using System; 
namespace factorial 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int fact = 1; 
      Console.Write("Enter a number to find factorial:"); 
      int n = int.Parse(Console.ReadLine()); 
      for (int i = n; i > 0; i--) 
      { 
       fact = fact * i; 
      } 
      Console.Write("Factorial of" + n +"is :"+fact); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

Sie sollten eine Erklärung mit Ihren Antworten hinzufügen, es wird anderen in der Zukunft helfen. [Antworten]. – cosmoonot

-2

using System; 
 

 
namespace septtwenty 
 
{ 
 
    class Program 
 
    { 
 
     static void Main(string[] args) 
 
     { 
 
      int i, number, fact; 
 
      System.Console.WriteLine("Enter the Number"); 
 
      number = int.Parse(Console.ReadLine()); 
 
      fact = number; 
 
      for (i = number -1; i>=1; i--) 
 
      { 
 
       fact = fact * i; 
 
      } 
 
      System.Console.WriteLine("\nFactorial of Given Number is: "+fact); 
 
      Console.ReadLine(); 
 
     } 
 
    } 
 
}

+1

Funktioniert nur für Nummern unter 100 BTW – gododgers

0
int n = 4, fact = n; 
for (int i = n; i > 1; i--) 
{ 
    fact *= (i - 1); 
} 
Console.WriteLine(fact); 
Console.ReadLine(); 
+0

Obwohl dies die Antwort auf die Frage sein könnte, nehmen Sie sich auch etwas Zeit, um zu erklären, warum es so ist. Denken Sie daran, dass zukünftige Benutzer von SO dies finden und ein wenig Kontext hilft. –