不用大数类。。。
思路就是将结果保存到一个整形数组中,每次进行更新。具体如下:
举个例子 比如 当前数组中存储的是32(我在数组中为了方便存储,将数组进行了倒序存储,所以实际是213),要乘以69,那么我们首先进行693(个位数)的操作,此时 693=207,因而现在数组原来是3的位置被替换为7,20为进位,接着69*2+20=158,原来为2的替换为8,进位为15,一位一位的补进去,因而现在为 7851,倒序一下为1587,验证一下 23(实际的为23,数组中为倒序)*69=1587,完美。代码为:
public String JieCheng(int x){
int []list=new int[1000]; //创建一个数组用来存放计算得到的整数
list[0]=1; //给初值
int listLength=1; //标记数组当前的长度
int midum1 = 0; //该参数用来标定每次进位的数字 需要每次清零
for(int i=2; i<=x; i++){ //对阶乘的数字进行循环相乘,从2开始
for(int j=0; j<listLength; j++){ //对当前的数组进行遍历并与当前的i相乘
int midum = list[j]*i+midum1; //相乘结果加上进位
midum1=0; //进位清零 目的是为了保证在对进位判断时均为当前进位
if(midum>9) { //若大于9 则将该数拆分为个位数字与进位
list[j] = midum%10;
midum1= midum/10;
}
else{ //小于9直接送入数组
list[j] = midum;
}
}
//将当前进位一个个的存放进数组
if(midum1 >0){
while(midum1 > 0){
list[listLength++]=midum1%10;
midum1 /= 10;
}
}
}
String s = "";
for(int i=0;i<listLength;i++){
s = s + list[i];//拼接成字符串,最终放在变量s中
}
s=new StringBuffer(s).reverse().toString(); //字符串逆置
return s;
}