阶乘的研究

在自学中,有这样一道题,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来处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值