我正在处理来自CodeChef的问题,我需要计算n个数字的阶乘.
用户输入一个数字,该数字确定执行因子计算的总数,然后输入要计算的数字.
我的问题在于乘法本身.例如,如果我有一个int == 5那么结果将是20(它将仅由最后一个因子计算n,而不是全部计算n)
这是存在问题的地方:
for(int x = 0; x < _numbersToProcess.Length; x++) {// Loop throuigh Array by index
for (int y = 1; y < _numbersToProcess[x]; y++) {// Y is equal to less than index x
_result[x] = _numbersToProcess[x] * y;// Multiply x by y then add to array
}
}
Run Code Online (Sandbox Code Playgroud)
外循环定义要执行的计算数.
内循环通过迭代每个索引_numberToProcess并将其乘以小于要计算的数的每个数来来计算阶乘.
问题是因子计算会覆盖自身,
例如:
阶乘5的结果:20但它应该是120(它会覆盖自己,直到到达最后一个乘数)
所以我尝试了以下方法:
_result[x] = _numbersToProcess[x] *= y;
Run Code Online (Sandbox Code Playgroud)
这显然是一样的 _numbersToProcess[x] = _numbersToProcess[x] * y;
但这给出了一个完全不同的结果:
如果我们再次输入5,那么这将导致输出-1899959296.
我知道我可以轻松地从其他提交中复制和粘贴,但我想知道为什么我的方法不会产生正确的输出.
以下是整个方法: …
我有python 3.7.1和scipy版本:1.3.0。调用auto_arima时出现错误:“无法从'scipy.misc'导入名称'factorial'”
只是这个基本的导入会引起问题:-
“ from pmdarima.arima import auto_arima”
我尝试重新安装scipy,但是没有用
我知道如何在Python中轻松进行memoization,但我需要一种更快的方式来计算它们,所以我使用的是C++.但是,我不知道如何记忆.我知道它是关于将数值存储到数组或向量中,然后在检索时扫描它的值,但是看看如何完成它真的很有帮助,所以我可以尝试它的速度.
我想知道是否有一种快速的Pythonic方法来计算非整数的阶乘(例如,3.4)?当然,模块中的bult-in factorial()功能Math是可用的,但它只适用于积分(我不关心负数).
我正在学习Haskell,并且在使用本教程中的基本因子函数时遇到了问题.
基本上,我已经定义了一个因子:
Prelude> let factorial 0 = 1
Prelude> let factorial n = n * factorial (n - 1)
Run Code Online (Sandbox Code Playgroud)
类型检查:
Prelude> :t factorial
factorial :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)
这是有道理的.但是,此功能的行为不会.(interactive): out of memory无论输入是什么,它都会导致结果.
Prelude> factorial 5
(interactive): out of memory
Run Code Online (Sandbox Code Playgroud)
我必须假设这是一个无限递归调用,导致内存不足错误,但我不确定是什么原因导致它.同样的事情发生了factorial 0,即使我已经明确宣布这是1:
Prelude> factorial 0
(interactive): out of memory
Run Code Online (Sandbox Code Playgroud)
现在,这是一个奇怪的部分:如果我在文件中定义阶乘函数,它工作正常.我创建一个文件tesths.hsst:
factorial 0 = 1
factorial n = n * factorial (n - 1)
Run Code Online (Sandbox Code Playgroud)
然后,如果我回到GHCI运行:l tesths.hs,我可以毫无错误地执行factorial 5. …
这是我对阶乘的方法:
def factorial(n):
'''Returns factorial of n'''
r = 1
for i in range(1, n + 1):
r *= i
return r
Run Code Online (Sandbox Code Playgroud)
我认为这很简单,但我猜你可以提高效率,因为像100000这样的大数字需要很长时间.我的问题是,有吗?math.factorial()也不好,它花费的时间大致相同.
我需要编写一个应用程序来获取一个文件列表(一些大的,一些小的),并尽可能高效地将它们放到DVD(或CD或其他)上.本申请的重点是在移动到第二张光盘之前尽可能多地使用第一张光盘,在移动到第三张光盘之前尽可能多地填充第二张光盘,等等.
(注意:应用程序不必对DVD进行实际刻录,只需要找出最合适的效果).
我最初认为我有一个很好的游戏计划,通过生成文件的排列,然后检查每个组合,看看哪个最合适.(我的求助请求可以在这里找到)
但是文件越多,所需的时间就越长......指数级.所以我想就如何最好地实现这一点提出一些看法.
有任何想法吗?并且,一如既往,C#代码总是受到赞赏.
我遇到了计算100阶乘的问题.
这是我在Perl中首先尝试计算100!:
#!/usr/bin/perl
use strict;
use warnings;
use Math::BigInt;
my $n=<>;
chomp($n);
print fac($n);
sub fac
{
my ($m) = @_;
return 1 if($m <=1 );
return $m*fac($m-1);
}
Run Code Online (Sandbox Code Playgroud)
但是这给了我9.33262154439441e+157.
我需要所有数字的答案.
我该怎么办?
为什么下面的程序将 100 作为输入的阶乘打印为 0。如果 getFact 函数返回类型为 ,则可以计算相同的阶乘long double,但为了获得数字总和,我无法在 long double 上应用mod (%)运算符。
注意:unsigned long long和的大小long double在我的机器上相同。请建议输入为 100 什么类型的数据会给出正确的输出。
#include <iostream>
#include <stdlib.h>
unsigned long long int getFactorial(int);
unsigned long long int getSum(unsigned long long int);
int main()
{
unsigned long long int fact = 1;
unsigned long long int digsum = 0;
std::cout << "Enter a number to find fact := ";
int num;
std::cin >> num;
fact = getFactorial(num);
std::cout << …Run Code Online (Sandbox Code Playgroud)