微众银行秋招Java笔试第二题---询问次数

昨天下午做了微众银行的Java开发在线笔试题,编程题一共三道,记录一下解答思路

第二题给的题目意思很绕,而且表达的意思也很复杂,感觉在做语文阅读理解,最后发现要表达的意思就是:一个数二进制有n位,那么确定这个数需要对每一位询问,也就是询问n次但是有n!种问法,输出n!

比如3代表这个数是二进制表示是有3位,是一个介于0-7之间的数,需要分别确认第一位,第二位,第三位是不是0;根据确认的顺序不同,一共有3!种方案

最后就是求n的阶乘…然后题目要求返回得到的结果对1000003取余,注意不能用int,要用long,不然会溢出。

代码如下:

import java.util.Scanner;

/**
 * Created by wsw on 2019/9/19 16:57
 * 询问次数
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long num = scanner.nextInt();
        long sum = 1;
        for (long i = 1; i <= num ; i++) {
            if (sum > sum % 1000003){
                sum = sum % 1000003;
            }
            sum *= i;
        }
        System.out.println(sum % 1000003);
    }
}

输出结果:

3
6

Process finished with exit code 0

你可能感兴趣的:(秋招题解,java,数据结构)