求大数阶乘
使用数组保存结果各个位数。
/**
* 大数字阶乘
*/
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.close();
if (N < 1 || N > 200) {
System.out.println("Error");
return;
}
// BigInteger res = BigInteger.valueOf(1);
// for (int i = 1; i <= N; i++) {
// BigInteger v = BigInteger.valueOf(i);
// res = v.multiply(res);
// }
// System.out.println(res);
System.out.println(help(N));
}
public static String help(int n) {
int[] arr = new int[n*4];
arr[0] = 1;
int p = 0; //记录当前数字位数
for(int i=1;i<=n;i++)
{
int t = 0; //记录进位
for(int j = 0; j < p; j++){ //将最后一位之前的数字确定,并且确定最后一位的进位
arr[j] = arr[j] * i + t;
t = 0;
if(arr[j] >= 10){
t = arr[j] / 10;
arr[j] = arr[j] % 10;
}
}
int cur = arr[p] * i + t;
while(cur >= 10){
arr[p++] = cur % 10;
cur /= 10;
}
arr[p] = cur;
}
StringBuffer sb = new StringBuffer();
//数组长度就是前一阶乘长度-1+最后一位乘以n的结果长度
for(int j=p;j>=0;j--) {
sb.append(arr[j]);
}
return sb.toString();
}
}
PS:本人水平有限,文中如有错漏,欢迎大家指出。转载请注明来源。