【问题标题】:Calculating The Factorial of a Number计算一个数的阶乘
【发布时间】:2016-06-30 03:44:20
【问题描述】:

当我输入数字 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();
            }
        } 
    }
}

【问题讨论】:

标签: c# factorial


【解决方案1】:

你看起来是编程新手,或者至少是 C#,所以只是为了好玩,这会让你大吃一惊:

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

【讨论】:

  • 哇,非常感谢您提供的精彩示例!研究它们给了我一些重要的见解。它实际上也帮助我更好地理解了递归!真是太感谢你了!!
【解决方案2】:
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();
        }
    }
}

【讨论】:

  • 你应该在你的答案中添加一个解释,它会在未来帮助其他人。 How to Answer.
【解决方案3】:

你为什么要在循环内打印消息。把它放在循环外

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:
      import java.util.Scanner;
      public class Chapter5ProblemTwelve
      {
         public static void main(String [] args)
         {
            Scanner keyboard = new Scanner(System.in);
            int number;
            int factor = 1;
            int counter;
            System.out.print("Enter a positive integer to display the factorial number: ");
            number = keyboard.nextInt();
            //If the number entered is less then zero. The program will tell the user to enter a positive number
            if (number <= 0)
            {
               System.out.println("Please enter a postive number and rerun the program again.");
            }
            else
            {
            // Math work preformed if user enters a postive number. Example if user enters 4.
            // 1*1 = 1, 1*2 = 2,1*3 = 3, 1*4 = 4, The program will multiple all the answers together 1*2*3*4 = 24
             for (counter = 1; counter <= number; counter++)
             {
               factor = factor * counter;
             }
             //display 
             System.out.println("The factorial number of " + number + " is: " + factor);  
      
            }
      
         }
      
      }
      

      【讨论】:

      • 输入一个非负整数,显示整数的阶乘数:4 4的阶乘数为:24
      【解决方案6】:

      程序暂停等待输入。您需要将第二个 Console.ReadLine() 移出循环。并且可能是Console.WriteLine(),除非您希望看到每次迭代都完成。

      【讨论】:

        【解决方案7】:

        您需要从for 循环中移出两行。修改后的代码如下所示。

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

        有很多方法可以计算阶乘。您也可以通过创建递归函数来实现。 Google 可以在这些基本方面为您提供很多帮助。 谢谢!

        【讨论】:

          【解决方案8】:
          int n = 4, fact = n;
          for (int i = n; i > 1; i--)
          {
              fact *= (i - 1);
          }
          Console.WriteLine(fact);
          Console.ReadLine();
          

          【讨论】:

          • 虽然这可能是问题的答案,但也需要一些时间来解释为什么会这样。请记住,未来的 SO 用户可能会发现这一点,任何一点上下文都会有所帮助。
          猜你喜欢
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2014-03-24
          • 2015-04-19
          • 2022-01-17
          • 1970-01-01
          • 2013-02-19
          • 1970-01-01
          相关资源
          最近更新 更多