这天小明正在学数数。
他突然发现有些正整数的形状像一座“山”,比如 123565321 、 145541 ,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。
小明数了很久也没有数完,他想让你告诉他在区间[2022,2022222022]中有多少个数的形状像一座“山”。
解题思路:
先判断它是否为回文,再判断其是否递增,用计数器计数。
解题代码:
public class Main2 {public static void main(String[] args) {int count=0;for(int i=2022;i<2022222022;i++){if(ishuiwen(i))if(isdizeng(i))count++;}System.out.println(count);}public static boolean ishuiwen(int i) {String s="" + i;StringBuilder str = new StringBuilder(s);if (str.reverse().toString().equals(s)) {return true;}return false;}public static boolean isdizeng(int i){String str = "" + i;int len = str.length();if(len%2!=0) {len=len+1;}for (int j = 0; j < len / 2-1; j++){if ((int)str.charAt(j) >(int)str.charAt(j + 1)) {return false;}}return true;}
}
解题结果:
实验总结:
1.暴力法可以写出来但是时间有点长
2.在网上看到一种很简便的方法,通过取余求出各位上的数字进行比较。
public static boolean isPalindromeAndMonotonous(int num) {if (num != 0 && num % 10 == 0 || num < 0) {return false;}int reverseNum = 0;while (num > reverseNum) {int b = num % 10;if (reverseNum % 10 > b) {return false;}reverseNum = reverseNum * 10 + b;num /= 10;}return reverseNum == num || reverseNum / 10 == num;}