我如何写一个超级因素的程序?

时间:2016-11-08 18:31:22

标签: java factorial

  

编写程序,使用for循环计算和打印数字的超阶乘。数字的阶乘是所有整数的乘积,包括该数字,所以阶乘4(写成4!)是4 * 3 * 2 * 1 = 24。

     

超级因子是所有因子的产物,包括该因子。

     

4 !! = 4!* 3!×2!* 1!

我使用以下代码找到了“factorial”:

var upload = multer({
    storage: s3({
        dirname: '/',
        bucket: 'bucket',
        secretAccessKey: 'key',
        accessKeyId: 'key',
        region: 'us-west-2',
        filename: function (req, file, cb) {
            cb(null, file.originalname); 
        }
    })
});

app.post('/upload', upload.array('file'), function (req, res, next) {
    res.send("Uploaded!");
});

3 个答案:

答案 0 :(得分:1)

考虑4! = 4x​​3x2x1,你可以看到分解中有4个数字。一般来说,在n的分解中会有n个数字! (n(n-1)(n-2)....(n-(n-1))。所以你需要做的就是得到超级因子,取分解中每个分量的阶乘。

伪代码看起来像这样

sp = 0 
for i = n to 1:
  sp = sp * factorial(i)
end for
return sp

答案 1 :(得分:0)

您的析法方法中最重要的一行是这一行:

output = output * i;

您将output乘以i,其中i是一个不断增加1的整数。

超因子和正常因子之间有什么区别?要评估超因子,您将output乘以i而不是i的阶乘,对吗?

所以就这样吧!我已经向你解释了整件事!只需创建一个名为superfactorial的新方法,从factorial方法复制所有内容并更改此行:

output = output * i;

到此:

output = output * factorial(i);

答案 2 :(得分:0)

这是一种递归方法。 基本上,在阶乘中,你乘以n * fact(n-1)。在这里,我们做事实(n)* superFact(n-1)因为我们需要所有阶乘的乘积。

  int superfactorial(int n) {
    if (n == 0 || n == 1) {
      return factorial(n);
    } else {
      return factorial(n) * superfactorial(n-1);
    }
  }


  int factorial(int n) {
    if(n == 0 || n == 1) {
      return n;
    } else {
      return n * factorial(n-1);
    }
  }