首页 > 解决方案 > 更新帖子:如何获得 JavaScript 阶乘程序的循环来显示使用的工作?查看要求

问题描述

这是我今天的第二篇文章,因为原文不清楚,我被敦促重新发布,因为尽管得到了一些好的答案,但它们不符合代码的要求。我被要求用 JavaScript 编写一个允许用户执行多项任务的程序,其中之一是向用户询问一个数字并计算该数字的阶乘,然后以需求中列出的格式显示它。由于我对 Java 脚本了解不多,因此我使用了已经提出的问题并设法使计算工作,但无法弄清楚如何在仍然满足要求的同时获得所需的输出。

要求: • 只能使用提供的变量 Number(变量初始化为 0 以保存用户输入) Factorial(变量初始化为 1 以保存计算出的阶乘值) Count(变量保存执行循环执行阶乘计算的次数)。这是挑战而不是我设置的限制 • 不能使用花哨的库 • 需要对输出使用循环解决方案。另一篇文章的答案需要引入新变量,也许是我缺乏理解,但也许我自上一篇文章以来获得的写得不好的伪代码可能会有所帮助。• 以以下格式输出:(这是一个警告,因此部分程序正常)

The factorial of 5 is 5*4*3*2*1=120 
OR
5! is  5*4*3*2*1=120 

写得不好的伪代码:

在此处输入图像描述

代码:

//prompts the user for a positive number
var number = parseInt(prompt("Please enter a positive number"));
console.log(number);
//checks the number to see if it is a string
if (isNaN(number))
{
  alert("Invalid. Please Enter valid NUMBER")
}

//checks the number to see if it is negaive
else if (number < 0) 
{
  alert("Please Enter valid positive number");
}

//if a positive integer is entered a loop is started to calculate the factorial of the number the user entered
else {
    let factorial = 1;
    for (count = 1; count <= number; count++) {
        factorial *= count;
         }
    
    //Sends the inital number back to the user and tells them the factorial of that number
    alert("The factorial of " + number + " is " + factorial + ".");
}




我知道有很多类似的问题,包括我的第一篇文章,当我环顾四周并使用它们来帮助我做到这一点时,它现在成功了,但它正在将输出转换为我正在努力解决的所需格式。我被告知可以使用循环,但不知道从哪里开始实施,我只被允许使用该解决方案。

再次,我想为我的第一篇文章道歉,如果不是挑战提供者设置的令人难以置信的荒谬限制,给定的答案会很好用,他们还负责给我垃圾伪代码,这不是我的去,但我用来考虑循环。

我很感激阅读这篇 amd 提供的解决方案所花费的时间,因此我将返回并尝试在上一篇文章中标记所有工作答案,以解决人们可能会寻找答案的任何正常问题。

标签: javascriptloopsfor-loopwhile-loopfactorial

解决方案


这有点脏,但它应该满足除 , 和 之外没有其他变量numbercount使用的条件factorial

let number = 5;
let factorial = 120; 
// ^ Do your own calculation for this

alert(`The factorial of ${number} is ${Array.from(Array(number + 1).keys()).slice(1).reverse().join("*")}=${factorial}`)

那么这里发生了什么?我们使用插值模板字符串来产生所需的输出,其中的表达式${these things}被评估为字符串。我们放在那里的烂摊子是什么?

Array.from(Array(number + 1).keys())

上面的表达式创建了数组[0,1,2,3,4,5]

.slice(1)给我们[1,2,3,4,5]

.reverse()给我们[5,4,3,2,1]

join("*")给我们"5*4*3*2*1"

当所有的东西放在一起给我们The factorial of 5 is 5*4*3*2*1=120

瞧!输出以所需格式打印,而不引入任何新变量。

编辑:哦,你不需要为此使用插值字符串。您也可以像在问题中所做的那样将常规字符串连接在一起。例如

 "The factorial of " + factorial + " is " + Array.from(Array(number + 1).keys()).slice(1).reverse().join("*") + "=" + factorial

推荐阅读