描述:n!表示n的阶乘, n!!表示(n!)!,现在需要写一个方法比较两个任意阶数的数的大小,输入以字符串形式给出,例如:比较 6!!!! 和 48!!
算法描述:
1.先对输入进行归一化,即同时除掉相同的阶数,比较剩余部分的大小,比如:先将以上参数化简为: 6! !和48 比较大小;
2.设化简后无阶乘符的数为simpleNum, 上例中simpleNum=48;含阶乘的数为 complexNum=6!!;
3. 取complexNum 中数字部分,与simpleNum 比较大小,如果前者大,直接返回,否则求一次阶乘,再与后者比较; 比较6 与48 大小
4. 如果在上述循环中出现simpleNum比后者小了,而后者还有阶乘符号,那simpleNum就小;直至比较两个不含阶乘数的大小为止; 比较6!=360与48 大小, 返回commlexNum大;
再例:6!!! 与 3!!!! ,先化简为: 6 与3!; 6<3 ;6=(3!=6) && 比较数中已不含! 返回:num1<num2
未解决问题: 目前以递归求解阶乘,当需要进行比较复杂的阶乘预算时,会出现stack overflow error, 正待改进阶乘算法; long型数字 也不够大数运算;
如果用log求阶乘的话,精确性又收到影响:
public static int factory2(int num){// 阶乘求解公式2
if(num==1){
return 1;
}
else{
double result=0;
for(int i=1;i<=num;i++){
result+=Math.log(i);
}
return (int)Math.exp(result);
}
}
这样运行factory2(4)得到结果为23 ,行不通。下面是代码:

该博客探讨如何比较两个含有任意阶数阶乘的数的大小。首先对输入进行归一化,去掉相同阶数,然后比较剩余部分。接着,分别处理含阶乘的数(complexNum)和无阶乘的数(simpleNum),通过循环判断和阶乘运算,直至比较到不含阶乘的数。文章提到当前解决方案存在递归导致的栈溢出和长整型数值限制的问题,需要改进阶乘计算方法并考虑精度问题。
最低0.47元/天 解锁文章
1447

被折叠的 条评论
为什么被折叠?



