2023蓝桥杯JavaB部分题解
试题 A: 阶乘求和
【问题描述】 令 S = 1! + 2! + 3! + ... + 202320232023!,求 S 的末尾 9 位数字。 提示:答案首位不为 0。
【思路】暴力实现
long a = 1; long b= 202320232023L; BigInteger sum = new BigInteger(String.valueOf(0)); BigInteger zhongjian=new BigInteger(String.valueOf(1)); for(;a<=b;a++){ zhongjian = zhongjian.multiply(BigInteger.valueOf(a)); sum = sum.add(zhongjian); } BigInteger end =sum.remainder(BigInteger.valueOf(1000000000)); System.out.println(end);
但是跑的时间会很长。最后得出一个结果420940313。网上有一篇题解上写的解法我没看懂,会的小伙伴可以留言。
试题 B: 幸运数字
【问题描述】 哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整 数。例如 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 个幸运数 字是多少?你只需要告诉小蓝这个整数的十进制表示即可。
【普及】
列举几个进制转换的方法
int n = 10; // 十进制转二进制 String s = Integer.toBinaryString(n); // 十进制转八进制 String s1 = Integer.toOctalString(n); // 十进制转十六进制 String s2 = Integer.toHexString(n);
【答案】
public static void main(String[] args) { int num = 10; int i =127; while(true){ //转二进制 String s = Integer.toBinaryString(i); //转八进制 String s1 = Integer.toOctalString(i); //转十进制 String s2 = String.valueOf(i); //转十六进制 String s3 = Integer.toHexString(i); if(zhengchu(i,s,2)&&zhengchu(i,s1,8)&&zhengchu(i,s2,10)&&zhengchu(i,s3,16)){ num++; } if(num==2023){ System.out.println(i); return; } i++; } } public static boolean zhengchu(int i,String s,int base){ char c[]=s.toCharArray(); int sum = 0; for(int j=0; j<c.length;j++){ sum+=Character.digit(c[j],base); } return i % sum == 0; }
一个特别重要的方法
Character.digit(char,base) //可以将字符类型的数据转换成任意进制
。。。先更新到这里
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
union与order by 结合使用