当前位置: 首页 > 面试题库 >

阶乘方法效果不佳!

秦联
2023-03-14
问题内容

嗨,这是一个阶乘方法,但是它在控制台中显示0,请帮助我,谢谢

public class Demo {

    public static void main(String[] args) {
        Demo obj = new Demo();
        System.out.println(obj.factorial(500));
    }

    public int factorial(int n) {
        int fact = 1;

        for (int i = 2; i <= n; i++) {
            fact= fact*i;
        }
        return fact;
    }

编辑:将返回无限!

public class Demo {

    public static void main(String[] args) {
        Demo obj = new Demo();
        System.out.println(obj.factorial(500));
    }

    public double  factorial(long n) {
       double fact = 1;

        for (int i = 2; i <= n; i++) {
            fact= fact*i;
        }
        return fact;
    }
}

问题答案:

由于500!等于,1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000您无法将其放入int范围内(最大为2147483647)。

  • 使用int最多只能存储12!
  • 使用a,long您将起床20!
  • 使用a,double您将开始使用170!

这是使用的解决方案BigInteger

public static BigInteger factorial(int i) {
    BigInteger n = BigInteger.valueOf(i);
    while (--i > 0)
        n = n.multiply(BigInteger.valueOf(i));
    return n;
}


 类似资料:
  • 假设我们有一个非常大的阶乘,如(10^7)!,有没有一种有效的方法来计算它的精确数字?(Wolfram alpha结果表示(10^7)!有657060位) 当然,我不能通过将值一个接一个地相乘来使用朴素的实现,因为它太慢了,无法评估结果。 我认为这个问题的解决方案最终可能是 如何在不计算阶乘的情况下找到阶乘的位数 如何更有效地计算阶乘(最好是BigInteger或BigDecimal) 我更喜欢1

  • 我试图改进大数的阶乘计算的运行时间。 第一个简单循环和乘法的代码。 此函数的分析结果: 对于n=1000--总时间:0.001115 s for n=10000--总时间:0.035327 s 对于n=100000——总时间:3.77454 s。 从n=100000的测线仪中,我可以看到大部分时间都花在乘法步骤上,即“98.8” 因此,试图将阶乘乘法减少一半,对于偶数,因此进行了强度减少。 后半部

  • 计算一个数字的阶乘。 使用递归。如果 n 小于或等于 1 ,则返回 1 。否则返回 n 和 n - 1 的阶乘。如果 n 是负数,则会引发异常。 const factorial = n => n < 0 ? (() => { throw new TypeError('Negative numbers are not allowed!'); })()

  • 本文向大家介绍C#采用递归实现阶乘的方法,包括了C#采用递归实现阶乘的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#采用递归实现阶乘的方法,供大家参考之用。通常来说,如果想实现一个阶乘,比如6 * 5 * 4 * 3 * 2 * 1,首先想到的可能是循环遍历。 如下示例所示: 但以上的阶乘还有一种实现方式:6 * (6-1) * (6-2) * (6-3) * (6-4) * (

  • 主要内容:jQuery 效果方法jQuery 效果方法 下面的表格列出了所有用于创建动画效果的 jQuery 方法。 方法 描述 animate() 对被选元素应用"自定义"的动画 clearQueue() 对被选元素移除所有排队函数(仍未运行的) delay() 对被选元素的所有排队函数(仍未运行)设置延迟 dequeue() 移除下一个排队函数,然后执行函数 fadeIn() 逐渐改变被选元素的不透明度,从隐藏到可见 fad

  • 问题内容: 我想使用for循环在Java中执行阶乘程序。例如,我想接受用户输入,说,然后相乘。我需要构建循环的帮助。到目前为止,我不知道去哪里。 问题答案: 尝试 正如@Marko Topolnik在评论中提到的那样,该代码将适用于输入最多12的输入。对于较大的输入,由于溢出将输出无穷大。 对于大于12的数字,您应使用更高的数据类型,例如 你可以试试: