`
宁辉522
  • 浏览: 15654 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

阶乘的研究

阅读更多
在自学中,有这样一道题,1!+2!+3!+……+30!这个题让我想了很长时间,而且查了很多的资料,开始的时候自己用递归的方法写出了一个数的阶乘,但是不知道怎么将它全部加起来,又查资料,一看很简单嘛!就实现如下的程序:
  package com.lianxi;

public class jiecheng {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
long sum=0;
for(int i=1;i<=10;i++){

sum=sum+fun(i);

}
System.out.println(sum);
}
public static long fun(int num)
{
if(num==1||num==0){
return 1;
}else{
return (num*fun(num-1));
}
}


}
但是做到30 的阶乘时,输出的数就是负数了,我又晕了,好吧!查资料,说是long的数值范围是-9223372036854775808到9223372036854775807,最后的数超出了这个数,有没有办法了,肿么办?上网查资料吧!看到博客园的一篇文章专门说阶乘数据溢出的事,一看,哇!太晕,看不懂啊!但是看不懂怎么办了,好吧!收藏下来吧!就转载到了我的博客里了,但是收藏还是不能解决实际问题啊!只好有查资料,最后好不容易解决了这个问题?
package com.lianxi;

import java.math.*;
/**
*
* @author Administrator
*/
public class jiecheng5
{
      public int aa[]=new int [100];
      public int b=0;
      public void chushihua()
      {
         for(int x=0;x<100;x++)
         {
          aa[x]=x+1;
         }

      }
   public void jiecheng()
   {
      BigInteger cc[]=new BigInteger[100];
     
      BigInteger d;
     
      BigInteger e;
     
      d=BigInteger.valueOf(0);
     
      for(int x=0;x<30;x++)
      {  
        cc[x]=BigInteger.valueOf(aa[x]);

      }
      for(int x=2;x<30;x++)
      {
         for(int y=2;y<aa[x];y++)
         {

          e=BigInteger.valueOf(y);
         
          cc[x]=cc[x].multiply(e);
       
         }
        System.out.println(cc[x]);
      }
      for(int x=0;x<30;x++)
      {
         d=d.add(cc[x]);
      }
      System.out.println(' ');
     
      System.out.println(' ');
     
      System.out.println("阶乘和是:"+d);
  }
   
   public static void main(String[] args)
     {
       
        jiecheng5 bb=new jiecheng5();
       
        bb.chushihua();bb.jiecheng();
     }
}
最后问题是解决了,但是我从中学到了什么呢?总结一下,当数据大到溢出long时,怎么来处理,用BigInteger来处理。
分享到:
评论

相关推荐

    巧算100万阶乘

    ### 巧算100万阶乘:C++实现与分析 #### 背景介绍 阶乘是一个常见的数学概念,表示所有小于等于该数的正整数的乘积。...此外,还可以进一步研究如何提高算法的精度和效率,比如使用高精度乘法算法等。

    大数阶乘 算法 源代码 程序 支持大于100000的阶乘

    在IT领域,大数阶乘算法是计算大数据量阶乘的一种方法,特别是在处理超过普通整型范围的阶乘时显得尤为重要。...通过研究这些源代码,开发者可以深入理解大数处理的原理,并将其应用到其他需要处理大数的场景中。

    Factorial (双)阶乘快速计算器

    总的来说,"Factorial (双)阶乘快速计算器"是一款专注于高效且高精度的阶乘和双阶乘计算的工具,适合于需要快速处理阶乘问题的用户,无论是学生、教师还是研究人员。其背后的核心算法和大数运算机制使得它能够应对大...

    嵌套调用求阶乘和_C语言_嵌套调用_

    在编程领域,嵌套调用是一种常见的技术,特别是在C语言中。嵌套调用是指在一个函数内部调用另一个函数,这种技术可以实现复杂的逻辑...通过深入研究和实践,开发者可以更好地掌握嵌套调用和递归在解决问题中的应用。

    M的阶乘(长整形处理)不会出现溢出

    在编程领域,阶乘是一个常见...这种方法允许我们计算超出单个整数类型限制的阶乘,扩大了计算范围,对于研究大数计算、密码学等领域具有重要意义。通过这种方式,我们可以安全地处理任意整数M的阶乘,无论其数值多大。

    基于FPGA的零误差大数阶乘算法的设计与实现.pdf

    在大数据时代的背景下,科学计算对超高精度的需求日益增加,特别是涉及到大数阶乘问题时,传统的计算方法如斯特林公式...这一研究成果为大数阶乘问题提供了新的解决思路,对大数据时代下的科学计算领域具有深远的影响。

    jiecheng.rar_200的阶乘_阶乘的程序

    3. 阶乘计算算法:研究不同的阶乘计算策略,如动态规划、矩阵快速幂、斯特林公式等。 4. 代码优化:了解如何通过算法优化提高大数计算的效率,例如避免重复计算,使用适当的数据结构等。 5. 源码阅读:分析...

    .Net 初学者的树控件和递归算法求阶乘

    通过研究这些示例,初学者可以加深对这两个概念的理解,并提高编程技能。 总之,.NET初学者在学习过程中应掌握树控件的使用,如创建、操作节点和处理事件,同时理解并能应用递归算法,如求阶乘。通过实践和探索,...

    大整数阶乘新思路算法介绍及源码

    在编程领域,大整数阶乘是一个常见的计算挑战,特别是在处理大数据或高精度数学运算时。这个主题的标题“大整数阶乘新思路算法介绍及源码”暗示了我们将探讨一种创新的方法来解决这个问题,并且会提供源代码作为参考...

    阶乘与排列组合算法 各行各业都能用到

    阶乘与排列组合算法是计算机科学中基础但...总的来说,阶乘与排列组合算法是计算机科学的基础,无论是在理论研究还是实际应用中,都具有极高的价值。深入学习和理解这些概念,对提高编程技能和解决问题的能力大有裨益。

    VB 阶乘运算,排列,组合算法的源代码.rar

    在VB(Visual Basic)编程语言中,阶乘、排列和组合是重要的数学概念,它们在计算机科学和算法设计中有着广泛的应用。...通过深入研究和实践,开发者可以进一步提升其编程技巧,特别是在算法设计和问题解决方面。

    用Stirling逼近近似计算阶乘的探讨与应用

    【Stirling逼近与阶乘计算】 阶乘在数学和信息学竞赛中具有核心地位,尤其是在高精度计算和算法设计中。随着数字增大,直接计算阶乘变得困难,特别是需要考虑精度和效率的问题。Stirling逼近就是一种在处理大数阶乘...

    python阶乘函数.md

    ### Python 阶乘函数详解 #### 一、阶乘函数概述 阶乘是一个常见的数学概念,用于计算正整数的所有正整数因子的乘积。...此外,对于阶乘的进一步扩展研究也有助于深入理解编程中的递归思想和其他高级编程技巧。

    易语言源码取双阶乘模块源码.rar

    总之,这个压缩包提供了一个易语言实现的阶乘和双阶乘计算模块,适合初学者研究易语言编程,或者对阶乘和双阶乘计算有兴趣的开发者使用。通过阅读和运行源码,不仅可以学习到阶乘和双阶乘的计算方法,还能深入理解...

    C 支持括号,阶乘号的表达式计算程序代码.rar

    该压缩包文件“C 支持括号,阶乘号的表达式计算程序代码.rar”包含了一个用C语言编写的控制台...通过研究这个程序,开发者可以深入了解如何在C语言环境中处理复杂算术表达式,同时也可以提高自己的算法设计和实现能力。

    大数计算(运算)器(支持大素数判定和大数阶乘)

    这些功能对于学习和研究大数计算或者在实际应用中处理大量数据具有很高的价值。 总的来说,大数计算是一个涉及算法优化、高效存储和高级数学概念的领域。通过这个工具,用户可以深入理解大数运算的原理,同时在实际...

    阶乘的计算复杂性.pptx

    根据给定文件的信息,我们可以详细探讨“阶乘的计算复杂性”这一主题。阶乘是一个在数学、计算机科学以及各种实际应用中广泛使用的概念。...无论是理论研究还是实际应用,掌握阶乘的计算方法都是非常有益的。

    易语言取双阶乘模块源码.zip易语言项目例子源码下载

    易语言是一种专为非计算机专业人士设计的编程语言,它的语法简洁明了,使得初学者能够快速上手。...通过深入研究和实践,我们可以掌握易语言编程基础,理解双阶乘的计算方法,并学习如何在实际项目中应用这些知识。

    递归算法求阶乘-易语言

    在IT领域,递归算法是一种重要的...通过打开并研究这个文件,你可以更深入地了解如何在实际代码中应用递归算法。初学者可以以此为起点,进一步探索易语言的其他功能和编程概念,如循环、条件判断等,逐步提升编程技能。

Global site tag (gtag.js) - Google Analytics