【问题标题】:How to calculate the factorial of a number entered by user in Javascript, using, do-loop, while-loop?如何计算用户在Javascript中输入的数字的阶乘,使用,do-loop,while-loop?
【发布时间】:2020-11-02 04:09:27
【问题描述】:

我上一个问题的快速跟进问题。我想在下面添加代码来计算用户在 Javascript 中输入的数字的阶乘。

<!DOCTYPE html>
<html>
<head>
<title>Sum of Numbers</title>
 <script>
  var numbers = prompt("Enter a  number 1-100");

  while (numbers!=null && (isNaN(parseInt(numbers)) || parseInt(numbers) >100 || parseInt(numbers) <1)) {
      numbers = prompt("Try again.Enter a  number 1-100");
  }
  

  if (numbers !=null){
        alert("Finally you entered a correct number");

  var sum = 0;
  var numOfLoops = numbers;
  var counter = 1;
  do {
    sum+=counter;
    counter++;
  }

  while (counter<=numOfLoops)
  alert ("The sum of numbers from 1 to " + numbers + "is =" +sum);
}
 </script>

</head>
<body>
    <script>
    document.write("<h1>Sum of Numbers</h1>");
        document.write("The sum of numbers from 1 to = " + numbers +  "&nbsp;is = "  +
            + sum + "<br><br>");
    </script>

</body>
</html>

【问题讨论】:

    标签: javascript while-loop do-loops


    【解决方案1】:

    While 循环:

    const fact=n=>
      {
      if(n<0) throw 'factorial error on a negative number!'
      let r = 1
      while(n) r *= n--
      return r
      }
    

    一边做:

    const fact=n=>
      {
      if(n<0) throw 'factorial error on a negative number!'
      let r = 1
      do  r *= n || 1 // in case of n == 0
      while (n--)
      return r;
      }
    

    完整代码

    const
      msgPrompt_1 = 'Please enter a number from 0 to 100', 
      msgPrompt_n = 'Try again.... Enter a  number 0-100',
      fact        = n =>
        {
        let r = 1
        while(n) r *= n--
        return r
        }
    
    let numValue = parseInt(window.prompt(msgPrompt_1, ''), 10)
    
    while(isNaN(numValue) || numValue > 100 || numValue < 0) 
      {
      numValue = parseInt(window.prompt(msgPrompt_n, ''), 10)
      }
    
    alert(`factorial value of ${numValue} is = ${fact(numValue)}`  )

    【讨论】:

      【解决方案2】:

      如果您想对数字求和,请考虑使用算术级数公式。如果你想得到阶乘,方法如下所示。

      如果您想使用循环求和,只需将*= 更改为+=。

      While 循环方法

      const fact = (n) => {
        
      let res = 1;
        
      while (n > 0) {
        res *= n;
        n--;
      }
        
      return res;
        
      }
      
      fact(5) // 120
      

      在接近时做

      const fact = (n) => {
        
        let res = 1;
        
        do {
          res *= n;
          n--;
        } while (n > 0)
        
        return res;
        
      }
      
      fact(3) // 6
      

      这应该可以解决问题。 :)

      也许还考虑检查边缘情况,例如 n 是否为负数。

      祝你好运。

      【讨论】:

      • 0 不是极端情况:0! = 1。
      • 感谢您指出这一点。我更新了答案描述。 :)
      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多