杭电Hd 1018 大数题

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值