Java大数阶乘
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
模拟阶乘
public class Solution {
public static void main(String[] args) {
int[] res = new int[3000]; // 存储阶乘的最终结果
res[0] = 1; // 0和1的阶乘为1
Scanner sc = new Scanner(System.in);
System.out.print("请输入 n! 的 n:");
int n = sc.nextInt(); // 待求阶乘的数
int top = 0, carry = 0; // 分别表示结果的最高位和进位
for (int i = 2; i <= n; i++) { // 一直乘到n,模拟阶乘过程
for (int j = 0; j <= top; j++) {
res[j] = res[j] * i + carry;
carry = res[j] / 10; // 计算进位
if (j == top && carry >= 1) { // 计算到最高位且发现最高位有进位
top++; // 最高位加一
}
res[j] = res[j] % 10; // 取余,把余数存到当前位置
}
}
for (int i = top; i >= 0; i--) {
System.out.print(res[i]);
}
}
}
BigInteger
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入 n! 的 n:");
int n = sc.nextInt();
BigInteger bi = new BigInteger("1");
for (int i = 2; i <= n; i++) {
bi = bi.multiply(new BigInteger(i + ""));
}
System.out.println(bi);
sc.close();
}
}
网友评论