该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package main;
import java.util.ArrayList;
import java.util.List;
/*大概方法:将List的里的所有数循环*n
* 然后进位得到新的List
* */
public class Test {
/*@param 需要进位的list
* @out 进位后的容器
* */
public static void carry(Listarray){
int size = array.size();//储存位数
int temp=0;
for(int i=0;i
temp=array.get(i);//储存当前的数值
if(temp>=10){//判断是否需要进位
if(i
array.set(i, temp%10);//设置当前位
array.set(i+1, temp/10+array.get(i+1));//设置前一位
}else{
while(temp>=10){//最高位循环进位
array.set(i, temp%10);//设置当前的位数的数字
array.add(temp/10);
i++;
temp=temp/10;
}
}
}else{
array.set(i, temp);
}
}
}
public static List factorial(int n){
int timeBegin=(int) System.currentTimeMillis();//计算时间
List array = new ArrayList();
array.add(1);//初始化1
int size = 0;
for(int j=1;j<=n;j++){//循环n!
size = array.size();
for(int i=0;i
array.set(i, array.get(i)*j);
}
carry(array);//进位
}
//输出数值
for(int i=array.size()-1;i>=0;i--){
System.out.print(array.get(i));
if(i%4==0){
System.out.print(" ");
}if(i%100==0){
System.out.print("\n");
}
}
int timeFinishi=(int) System.currentTimeMillis();
int time = timeFinishi-timeBegin;
System.out.println("\n"+"\n"+"容器版:计算:"+n+"!的结果");
System.out.println("\n位数:"+array.size());
System.out.println("计算耗时: " + time +"毫秒" );
return array;
}
public static void main(String[] ags){
Test.factorial(10000);
}
}