【log求数字位数】HDU-1018 Big Number

【log求数字位数】HDU-1018 Big Number
【log求数字位数】HDU-1018 Big Number

注解

1、一个数字x的位数可用以10为底的对数加一获得,也就是
x的长度=(int)Math.log10(x)+1
2、对数里相乘可以写成对数相加的形式,也就是
log(a1a2a3)=loga1+loga2+loga3
3、综合以上两条,把阶乘形式先按2变成对数和的形式,然后对得数按1取其位数就是最终的长度。

代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=0; i<n; i++){
            int a = sc.nextInt();
            double b = 0;
            for(int j=1; j<=a; j++){
                b += Math.log10(1.0*j);
            }
            int re = (int)(b) + 1;
            System.out.println(re);
        }
    }
}

结果

【log求数字位数】HDU-1018 Big Number