算了吧。太大了。都已经大大超出long的最大值的。
public class MyTest1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long count=0;
MyTest1 myt=new MyTest1();
for(int i=1;i<=50;i++)//50都已经不行了,怎么算100到200呀
{
count+=myt.counts(i);
}
System.out.println(count);
}
long counts(int i)
{
if(i==1)
{
return 1;
}
else
{
return (long)(counts(i-1)*i);
}
}
}
import java.math.BigInteger;
public class TestFactorialSum {
public static void main(String[] args) {
int n = 200;
BigInteger bi = new BigInteger("0");
for(int i=1;i<=n;i++)
bi = bi.add(factorial(i));
System.out.println(bi);
}
public static BigInteger factorial(int num) {
if(num == 1)
return new BigInteger("1");
else
return new BigInteger(num+"").multiply(factorial(num-1));
}
}
这是大数求阶cheng,java上提供了一个BigInteger就是干这活的:如下。
import java.math.BigInteger;
/*
* 大数测试计算测试 。
* */
public class BigIntegerTest {
// 求每个数的阶乘 ;
public BigInteger jieCheng(int num){
BigInteger rs = new BigInteger("1") ;
for(int i=1 ;i<=num ;i++){
rs = rs.multiply(new BigInteger(i+""));
}
return rs;
}
// 求阶乘和;
public String bigCountSum(int sum){
BigInteger bs = new BigInteger("0");
for(int i=1;i<=sum;i++){
bs=bs.add(jieCheng(i)) ;
StringBuffer sb = new StringBuffer("") ;
}
return bs.toString() ;
}
public static void main(String[] args){
int i = 100 ;
System.out.println(new BigIntegerTest().bigCountSum(i));
}
}
楼上哥们说的对,long不可能存那么大的数,所以要用字符串处理。
阶乘的计算使用递归方法;
计算结果使用文件存储(虽然性能不如内存,但是是大型计算实用的结果存储方式)。