求一个数的阶乘,利用数组存储解决溢出。(数组大小可调整)
public class NFactorial {
public static void getFactorial(int n) {
int[] array=new int[40000];
int i,j,flag=0,carry=0;
array[0]=1;//carry为进位标志,flag为数组中最高位标记
for(i=2;i<=n;i++) {
for(j=0;j<=flag;j++) {
array[j]=array[j]*i+carry;
carry=array[j]/10;
if(j==flag&&carry>=1)
flag++;//当j为最高位且有进位时,该标记+1.
array[j]=array[j]%10;
}
}
for(i=flag;i>=0;i--)
System.out.print(array[i]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
getFactorial(11);
}
}
这种方法可以应对较大的数字。
原理中与我们小学学的乘法运算有一点不同,
假设9876*12,如果按照小学的乘法列竖式,那么7和 1对应,6和2对应,那样是为了便于用乘法口诀
而上面的方法是将12作为一个整体,分别与6,7,8,9相乘,并加上进位。