日期:2014-05-20  浏览次数:20774 次

请问各路大神100的阶乘的各个位数之和怎么求?比如10的阶乘是3628800,那我要求的结果是3+6+2+8+8+0+0=27
请问各路大神(用java)100的阶乘的各个位数之和怎么求?比如10的阶乘是3628800,那我要求的结果是3+6+2+8+8+0+0=27,有没有那种不用算出100!而直接得出其各个位之和的方法,小弟在这谢过各位大神了

------解决方案--------------------
使用java.math.BigDecimal类,可以处理大数据
------解决方案--------------------
import java.math.BigInteger;

public class Test_12 {

public static void main(String[] args) {
final BigInteger[] heap = new BigInteger[101];
heap[0]=BigInteger.valueOf(1);
for(int i=1;i<=100;i++){
heap[i] = heap[i-1].multiply(BigInteger.valueOf(i));
}
String value = heap[100].toString();
int sum = 0;
for(int i=0;i<value.length();i++){
sum += value.charAt(i)-'0';
}
System.out.println(sum);
}
}
648

------解决方案--------------------
import java.util.Arrays;
import java.util.Date;



public class yelin2 {
public static void main(String[] agrs){
int[] s = new int[200];
s[0]=1;
int k,j,result,p=0,q,res=0;
double stadate=System.nanoTime();
for(k=2;k<=100;k++)
{
q=0;
result=0;
for(int i=0;i<200;i++)
{
result=s[i]*k+q;
s[i]=result%10;
q=result/10;
if(q==0&&s[i+1]==0&&i>=p)
{
p=i;break;
}
}
}
System.out.println(Arrays.toString(s));
for(j=0;j<200;j++)
{
res=s[j]+res;
}

System.out.println(res);
double enddate=System.nanoTime();

System.out.println(enddate-stadate);
}    
}