🍓系列专栏:蓝桥杯
🍉个人主页:个人主页
目录
1.数位翻转
2.三个数求最大值的写法
3.两数交换的几种方法
4.身份证第18位合法性校验
5.黑洞数(陷阱数)
1.数位翻转
如: 整数 12345 返回结果为整数: 54321
当第一次看到这个题时,脑子里有3种反转方法:
1、采用取余的方法,把每一位的值都抽取出来。
public static void main(String[] args) {
//如: 整数 12345 返回结果为整数: 54321
int number=12345;
int sum=0;
while (number>0){
sum=sum*10+number % 10;
number=number/10;
}
System.out.println(sum);
}
2、第二种是把这个整数转换成一个数组,然后在进行反转。
public static void main(String[] args) {
//如: 整数 12345 返回结果为整数: 54321
int number = 12345;
String s = String.valueOf(number);
char[] array = s.toCharArray();
for (int i = array.length-1; i >=0; i--) {
System.out.print(array[i]);
}
}
3、第三种是 用 reverse() 进行字符串翻转
public static void main(String[] args) {
//如: 整数 12345 返回结果为整数: 54321
int number = 12345;
System.out.println(new StringBuilder(String.valueOf(number)).reverse().toString());
}
2.三个数求最大值的写法
调用Math中的的max
public class Test {
public static void main(String[] args) {
int a=10;
int b=5;
int c=29;
getMax(a,b,c);
}
private static void getMax(int a, int b, int c) {
System.out.println(Math.max(Math.max(a, b), c));
}
}
3.两数交换的几种方法
1、定义一个临时变量
public static void main(String[] args) {
int a=10;
int b=5;
int temp=0;
System.out.println("交换前:a:"+a+" b:"+b);
temp=a;
a=b;
b=temp;
System.out.println("交换后:a:"+a+" b:"+b);
}
2、采用加减法
public static void main(String[] args) {
int a=10;
int b=5;
System.out.println("交换前:a:"+a+" b:"+b);
a=a=b;
b=a-b;
a=a-b;
System.out.println("交换后:a:"+a+" b:"+b);
}
3、异或运算
public static void main(String[] args) {
int a=10;
int b=5;
System.out.println("交换前:a:"+a+" b:"+b);
a=a^b;
b=a^b;
a=a^b;
System.out.println("交换后:a:"+a+" b:"+b);
}
4.身份证第18位合法性校验
身份证第18位(校验码)的计算方法
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字分别和系数相乘的结果相加。
3、用加出来的值 对11取余,看余数是多少。
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。
public static void main(String[] args) {
int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
String[] last={"1","0","X","9","8","7","6","5","4","3","2"};
Scanner scanner = new Scanner(System.in);
String idCard= scanner.nextLine();
char[] array = idCard.toCharArray();
int sum=0;
for (int i = 0; i < array.length-1; i++) {
sum=(array[i]-'0')*weight[i]+sum;
}
sum=sum%11;
if (last[sum].equals(idCard.substring(17,18))){
System.out.println("yes");
}
else System.out.println("no");
}
5.黑洞数(陷阱数)
计算过程,给定一个数字,从大到小排列后减去从小到大排列,经过若干次运算后终得到一个固定的整数,三位数的黑洞495,四位数的黑洞6174等等。
public static void main(String[] args) {
int number=2023;
int count=0;
while (true){
String s = String.valueOf(number);
int[] array = new int[s.length()];
for (int i = 0; i < array.length; i++) {
array[i] = Integer.parseInt(String.valueOf(s.charAt(i)));
}
System.out.println(Arrays.toString(array));
Arrays.sort(array);
System.out.println(Arrays.toString(array));
int max=0;
int min=0;
for (int i = 0; i < array.length; i++) {
min=array[i]+min*10;
}
for (int i = array.length-1; i >=0; i--) {
max=max*10+array[i];
}
System.out.println(max+" "+min);
number=max-min;
count++;
if (count==20){
break;
}
}
}