刷题第一天

1.阶乘求和

令 = 1! + 2! + 3! + ... + 202320232023! ,求 的末尾 9 位数字。

提示:答案首位不为 0 。

很明显,这题如果死算肯定会超出最大数据类型的范围,n∈[1,202320232023],n越大,其中包含10,2,5,的数字(5,12,25,32......)也变多,这些数字相乘末尾为0,这些数字越多,末尾的0也就越多,我们要求最后九位数字,我们就先看看到什么程度的时候最后九位数字都为0,最后我们再求后九位不为0的数的阶乘之和,这样数字范围就不会超标了,所以我们先估计一下大概多少数的阶乘会有9个0,假设50

import java.math.BigInteger;

public class question1 {
    public static void main(String[] args) {
        BigInteger n=new BigInteger("1");
        BigInteger sum=new BigInteger("0");
        for(int i=1;i<50;i++) {
            n=n.multiply(new BigInteger(""+i));
            sum=sum.add(n);
            System.out.println("i="+i+"时,sum后九位是:"+sum.mod(new BigInteger(""+1000000000)));
        }
    }
}

然后我们看运行结果,很明显当i>38,sum的后九位都是维持在420940313,所以这就是结果 

 

http://t.csdnimg.cn/R1h0G      代码借鉴于该链接

2.幸运数字
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。例如 126 是十进制下的一个哈沙德数,因为 (126)10 mod (1+2+6) = 0;126也是八进制下的哈沙德数,因为 (126)10 = (176)8,(126)10 mod (1 + 7 + 6) = 0;同时 126 也是 16 进制下的哈沙德数,因为 (126)10 = (7e)16,(126)10 mod (7 + e) = 0。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数字是多少?你只需要告诉小蓝这个整数的十进制表示即可。

这里简单讲解一下题目,mod 的意思是:a mod b = 0,就是 a ÷ b 的余数为0(怕有不知道的小伙伴,我这里解释一下)

public class {
    public static void main(String[] args) {
        int j=0;
        for (int i=1;i<10000000;i++){
            if (BaseConversion(i)){
                j++;
                if (j==2023){
                    System.out.println(i);//215040
                    break;
                }
            }
        }
    }
    public static boolean BaseConversion(int n){
        //十进制
        int sum=0;
        int x=n;
        while (x!=0){
            sum+=(x%10);
            x/=10;
        }
        if (n%sum!=0)
            return false;
        //二进制
        sum=0;
        x=n;
        while (x!=0){
            sum+=(x%2);
            x/=2;
        }
        if (n%sum!=0)
            return false;
        //八进制
        sum=0;
        x=n;
        while (x!=0){
            sum+=(x%8);
            x/=8;
        }
        if (n%sum!=0)
            return false;
        //十六进制
        int[] arr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        sum=0;
        x=n;
        while (x!=0){
            sum+=(arr[x%16]);
            x/=16;
        }
        if (n%sum!=0)
            return false;
        return true;
    }
}
 

http://t.csdnimg.cn/lARtX    上面代码借鉴于该连接

相关推荐

  1. 第一业务

    2024-01-20 06:56:03       34 阅读
  2. 代码随想录-第二

    2024-01-20 06:56:03       44 阅读
  3. 代码随想录-第二十二

    2024-01-20 06:56:03       45 阅读
  4. 代码随想录-第二十三

    2024-01-20 06:56:03       45 阅读
  5. 寒假第五

    2024-01-20 06:56:03       33 阅读
  6. 寒假第14

    2024-01-20 06:56:03       35 阅读
  7. 笔记】第五

    2024-01-20 06:56:03       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-20 06:56:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-20 06:56:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-20 06:56:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-20 06:56:03       18 阅读

热门阅读

  1. 网络 - 网速很慢一定是网不好引起的吗?

    2024-01-20 06:56:03       32 阅读
  2. UDP协议

    UDP协议

    2024-01-20 06:56:03      32 阅读
  3. MySQL Interview Speedrun

    2024-01-20 06:56:03       29 阅读
  4. Linux系统安装ffmpeg & 升级ffmpeg

    2024-01-20 06:56:03       40 阅读
  5. 【通知】我的教学文章《Rust跟我学》已全部上线

    2024-01-20 06:56:03       41 阅读
  6. 一次Rust重写基础软件的实践(一)

    2024-01-20 06:56:03       28 阅读
  7. 驱动开发--多路复用-信号

    2024-01-20 06:56:03       28 阅读