题目1
不可能算到202320232023的阶乘
只需要算到39的阶乘就够了(对阶乘的和S的末9位不再有影响)
数字很大需要一边计算一边取模
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// int n = sc.nextInt();
// long sum = 1;
// long num = 0;
// for(int i=1;i<=n;i++) {
// sum= (sum*i)%1000000000;
// num=(num+sum)%1000000000;
// }
// //420940313
// System.out.println(num);
// sc.close();
System.out.println(420940313);
}
}
题目2
模拟进制(2、8、10、16)
public class Main {
public static void main(String[] args) {
int count=0;
for(int i=1;;i++)
{
if(i%checkTwo(i)==0
&&
i%checkEight(i)==0
&&
i%checkTen(i)==0
&&
i%checkSixteen(i)==0
)
{
count++;
}
if(count==2023)
{
System.out.println(i);
return ;
}
}
}
public static int checkTwo(int n){
String s=Integer.toBinaryString(n);
int sum=0;
for(int i=0;i<s.length();i++){
sum+=Integer.parseInt(s.charAt(i)+"");
}
return sum;
}
public static int checkTen(int n){
String s=String.valueOf(n);
int sum=0;
for(int i=0;i<s.length();i++){
sum+=Integer.parseInt(s.charAt(i)+"");
}
return sum;
}
public static int checkEight(int n){
String s=Integer.toOctalString(n);
int sum=0;
for(int i=0;i<s.length();i++){
sum+=Integer.parseInt(s.charAt(i)+"");
}
return sum;
}
public static int checkSixteen(int n){
String s=Integer.toHexString(n);
int sum=0;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
switch (c){
case 'a':sum+=10;
break;
case 'b':sum+=11;
break;
case 'c':sum+=12;
break;
case 'd':sum+=13;
break;
case 'e':sum+=14;
break;
case 'f':sum+=15;
break;
default:sum+=Integer.parseInt(c+"");
break;
}
}
return sum;
}
}
public class Main {
public static boolean res2(int i) {
int t = i;
String s = Integer.toBinaryString(i);
int sum = 0;
for(int ii=0;ii<s.length();ii++) {
sum+=Integer.parseInt(s.charAt(ii)+"");
}
return t%sum == 0;
}
public static boolean res8(int i) {
int t = i;
String s = Integer.toOctalString(i);
int sum = 0;
for(int ii=0;ii<s.length();ii++) {
sum+=Integer.parseInt(s.charAt(ii)+"");
}
return t%sum == 0;
}
public static boolean res10(int i) {
int t = i;
String s = String.valueOf(i);
int sum = 0;
for(int ii=0;ii<s.length();ii++) {
sum+=Integer.parseInt(s.charAt(ii)+"");
}
return t%sum == 0;
}
public static boolean res16(int i) {
int t = i;
String s = Integer.toHexString(i);
int sum = 0;
for(int ii=0;ii<s.length();ii++) {
if(s.charAt(ii) == 'a')
sum+=10;
else if(s.charAt(ii) == 'b')
sum+=11;
else if(s.charAt(ii) == 'c')
sum+=12;
else if(s.charAt(ii) == 'd')
sum+=13;
else if(s.charAt(ii) == 'e')
sum+=14;
else if(s.charAt(ii) == 'f')
sum+=15;
else
sum+=Integer.parseInt(s.charAt(ii)+"");
}
return t%sum == 0;
}
public static void main(String[] args) {
int sum = 0;
for(int i=1;;i++) {
if(res2(i)
&&res8(i)
&&res10(i)
&&res16(i)
)
{
sum++;
}
if(sum == 2023) {
System.out.println(i);
return ;
}
}
}
}