2016-11-16 12 views
-1

私のコードは正常に動作しますが、追加の変数やループなしで最適化が必要です。 出力は次のようになります。あなたに似た5 X 4 X 3 X 2 X 1 = 120VB.NETコンソールアプリケーション|入力されたユーザの表示ファクタリック

Private Sub FactorialCalculation() 

    Dim Number, Factorial As Integer 

    Console.WriteLine("Please enter a number") 
    Number = CInt(Console.ReadLine) 
    Factorial = 1 

    Console.WriteLine("Your number is " & Number) 

    If Number > 0 Then 
     Console.Write(Number & " X ") 
     For Count As Integer = 1 To Number 
      If (Number - Count) > 0 And (Number - Count) <> 1 Then 
       Factorial *= Count 
       Console.Write("{0} X ", Number - Count) 
      ElseIf (Number - Count) = 0 Then 
       Factorial *= Count 
      ElseIf (Number - Count) = 1 Then 
       Factorial *= Count 
       Console.Write(Number - Count) 
      End If 

     Next 
     Console.WriteLine(" = {0}", Factorial) 
    Else 
     Console.WriteLine("Please enter a positive number greater than 0") 
    End If 
End Sub 
+0

おそらくこの質問はhttp://codereview.stackexchange.com/に良いだろう? – Werdna

答えて

1

完全例。ポイントは関数を使用することです。 Int64のは事実21以上を保持するように見えることはできませんので、私はまた、数字< = 20に制限した再帰

Sub Main() 
    Console.WriteLine("Please enter a number") 
    Dim number As Long 
    If Long.TryParse(Console.ReadLine, number) AndAlso number >= 0 Then 
     Console.WriteLine("Your number is " & number) 
     Try 
      Console.WriteLine("{0} factorial = {1}", number, fact(number)) 
     Catch ex As Exception 
      Console.WriteLine(ex.Message) 
     End Try 
    Else 
     Console.WriteLine("Please enter a positive number greater than 0") 
    End If 
    Console.ReadLine() 
End Sub 

Private Function fact(ByVal number As Long) As Long 
    Return If(number = 0, 1, number * fact(number - 1)) 
End Function 

を選びました。

関連する問題