首先做对以后当然这是一道简单题,但是计算的方法可能得难为你一会。我就是,毕竟没做几道题,没经验,什么超时啊等等把握不准,我会慢慢练好的。下面是我第一次写的超时的代码:
import java.math.BigInteger;
import java.util.Scanner;
//大数题
public class Hd1018 {
public static void main(String[] args){
Scanner sc=new Scanner (System.in);
int n=Integer.valueOf(sc.next());
for(int i=0;i<n;i++){ //这里的n最大能10000 000
String num=sc.next();
jiecheng(num);
}
}
//求阶乘方法
static void jiecheng(String m){
BigInteger sum=new BigInteger("1");
for(int i=2;i<=Integer.valueOf(m);i++){
sum=sum.multiply(new BigInteger(""+i));
}
int n=sum.toString().length();//这纠结了一会,怎么数位数呢?
//看了看大数类的方法,可以把它先转化成字符串,那样就可以再调用的字符串的方法求其长度了
System.out.println(n);
}
}
上面的代码超时了,然后我实在想不出来了,就去网上看了看,网络真好,总能个我们收获。看到几种方法,写了一种。看来学编程,数学底子真是要命
import java.util.Scanner;
//大数题
public class Hd1018 {
public static void main(String[] args){
Scanner sc=new Scanner (System.in);
int n=sc.nextInt();
double sum=0;
for(int i=0;i<n;i++){ //这里的n最大能10000 000
int num=sc.nextInt();
for(int j=1;j<=num;j++){
sum+=Math.log10((double)j);
}
System.out.println((int)(sum+1));
sum=0;
}
}
}