蒜头君对阶乘产生了兴趣,他列出了前 1010 个正整数的阶乘以及对应位数的表:
nn | n!n! | 位数 |
---|---|---|
1 | 1 | 1 |
2 | 2 | 1 |
3 | 6 | 1 |
4 | 24 | 2 |
5 | 120 | 3 |
6 | 720 | 3 |
7 | 5040 | 4 |
8 | 40320 | 5 |
9 | 362880 | 6 |
10 | 3628800 | 7 |
对于蒜头君来说,再往后就很难计算了。他试图寻找阶乘位数的规律,但是失败了。现在请你帮他计算出第一个正整数的阶乘位数大于等于 1000010000 的数是多少,即求最小的正整数 nn 满足 n!n! 的位数大于等于 1000010000。
以下相关:
答案:3249
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static class dashujiecheng {
public static void main(String[] args){
BigInteger result=BigInteger.ONE;
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
for(int i=1;i<=n;i++){
result=result.multiply(new BigInteger(i+""));
}
System.out.println(result);
}
}
}
下面也可以
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static class dashujiecheng {
public static BigDecimal factorial(BigDecimal n){
BigDecimal bd1 = new BigDecimal(1);//BigDecimal类型的1
BigDecimal bd2 = new BigDecimal(2);//BigDecimal类型的2
BigDecimal result = bd1;//结果集,初值取1
while(n.compareTo(bd1) > 0){//参数大于1,进入循环
result = result.multiply(n.multiply(n.subtract(bd1)));//实现result*(n*(n-1))
n = n.subtract(bd2);//n-2后继续
}
return result;
}
public static void main(String[] arguments){
System.out.println("请输入阶乘数:");
Scanner sc = new Scanner(System.in);
BigDecimal n = sc.nextBigDecimal();
System.out.println(factorial(n));
System.out.println("ok");
// String str=sc.next();
// System.out.println(str.length());
sc.close();
}
}
}