2016-06-30 6 views
3

ファクタリアルを計算するために6を入力すると、30が返されます(間違っています)。数値のファクトリアルの計算

なぜプログラムの出力が正しくないのですか?

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

は、ループの外に、あなたConsole.WriteLineをとのreadlineを移動:

はその後、私の個人的な好み、無限可算あります。あなたが答えを得るまで、それを続けてください。 –

+0

ありがとう!どうもありがとうございました! – WarriorPrincessM

+0

お試し[この](https://dotnetfiddle.net/thhGTa) –

答えて

1

一部の入力を待ってプログラムが一時停止しています。 2番目のConsole.ReadLine()をループの外に移動する必要があります。また、各反復の完了を確認しない限り、Console.WriteLine()と思われます。

-1

は、なぜあなたはforループから2行を移動する必要がループ

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

外loop.put内側にメッセージを印刷しています。変更されたコードは次のようになります。

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(); 
     } 
    } 
} 

Factorialを計算する方法はたくさんあります。また、再帰関数を作成することでそれを行うこともできます。 Googleではこれらの基本的なことについて多くのお手伝いをいたします。 ありがとう!あなたがプログラミング、または少なくともC#に新しい外観

6

は、とても楽しみのためだけに、これはあなたの心を爆破する:

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; 
     } 
    } 
} 

いいえどこでもループ、および機能calls itself

あなたはこのようにそれを行うにもすることができます

:)台無しのすべての種類です...しかし、それは単一のコード行にまで重大な仕事を取得している
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); 
     } 
    } 
} 

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

すごい、すばらしい例をありがとう!それらを勉強して私にいくつかの大きな洞察力を与えました。それは実際に私が再帰をよく理解するのを助けました!十分にあなたに感謝することはできません! – 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

あなたの答えに説明を追加してください。将来的に他の人に役立つでしょう。 [回答]。 – 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

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

これは質問の答えかもしれませんが、それがなぜそうであるかを説明する時間を取ってください。将来のSOのユーザーがこれを見つけるかもしれないことを思い出してください。 –