杭电Hd 1018 大数题

来源:互联网 发布:淘宝运单模板怎么设置 编辑:程序博客网 时间:2024/06/14 22:17

首先做对以后当然这是一道简单题,但是计算的方法可能得难为你一会。我就是,毕竟没做几道题,没经验,什么超时啊等等把握不准,我会慢慢练好的。下面是我第一次写的超时的代码:
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;
 }
}
}

 

原创粉丝点击