【发布时间】:2014-02-07 14:56:50
【问题描述】:
我有一个问题,然后给定一些输入数字 n,我们必须检查这个 no 是否是其他 no 的阶乘。
输入 24,输出为真
输入 25,输出错误
我为此编写了以下程序:-
int factorial(int num1)
{
if(num1 > 1)
{
return num1* factorial(num1-1) ;
}
else
{
return 1 ;
}
}
int is_factorial(int num2)
{
int fact = 0 ;
int i = 0 ;
while(fact < num2)
{
fact = factorial(i) ;
i++ ;
}
if(fact == num2)
{
return 0 ;
}
else
{
return -1;
}
}
这两个功能似乎都可以正常工作。
当我们为大量输入重复提供它们时,is_factorial 将重复调用factorial,这真的是浪费时间。
我也尝试过维护一个阶乘表
那么,我的问题是,有没有更有效的方法来检查一个数字是否是阶乘?
【问题讨论】:
-
有一个已知阶乘数组......
-
我试过了。抱歉,我忘了在问题中提及。
-
“我试过了。” - 那意味着什么?
-
定义优雅。你的问题是“有没有更有效的方法来检查一个数字是否是阶乘?” - 答案是:最有效的方法是......鼓声......拥有一系列已知的阶乘。
-
“我正在寻找一个比在数组中存储阶乘列表更优雅的解决方案。”——在哪里?一个明显的优雅解决方案直接来自阶乘的定义。另一种有效的方法是动态构建阶乘表,看看其中是否包含数字。
标签: c performance algorithm factorial