硬派健身 2018-01-29
简单的回文数
看到好几种方法啊
方法一(取巧但耗时最少):
public class Main { public static void main(String[] args) { for(int i=1;i<10;i++){ for(int j=0;j<10;j++){ System.out.println(""+i+j+j+i); //或者 // System.out.printf("%d%d%d%d",i,j,j,i); // System.out.println(); } } } }
方法二(从右往左读,判断是否相等)
public class Main { public static void main(String[] args) throws Exception { for (int i = 1000; i < 10000; i++) { int a = i; int b = 0; while (a!=0) { b = b * 10 + a % 10; a = a / 10; } if (b == i) { System.out.println(i); } } } } <br />
方法三(用除法获取每一位数,然后比较)。。。。
方法四(使用char[] 来保存每一位数,然后比较)。。
public class Main { public static void main(String[] args) { for(int i=10000;i<1000000;i++){ int flag = 0; String str =""+i; char[] chars = str.toCharArray(); for(int j=0;j<chars.length/2; j++) { //判断第0个是否等于第n-0个,第1个是否等于第n-1个,n-( )=j flag = j; if(chars[j] != chars[ chars.length-1-j] ) break; flag++;//flag用来获取位置,判断前一半是否等于后一半 } //判断前一半是否等于后一半 if(flag>=chars.length/2) System.out.println(str); } } }
感觉法一比较灵巧啊
方法一(上边的法一变形,耗时较少,约265ms,内存占用20.99MB):
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.close(); //因为回文5或6位,所以abcba或abccba //遍历abc即可,万位不为0,即a!=0 for(int a=1;a<=9;a++) for(int b=0;b<=9;b++) for(int c=0;c<=9;c++) { //判断与输入数字相等即可 if(num==2*a+2*b+c) System.out.println(""+a+b+c+b+a); } //与上同理 for(int a=1;a<=9;a++) for(int b=0;b<=9;b++) for(int c=0;c<=9;c++) { if(num==2*a+2*b+2*c) System.out.println(""+a+b+c+c+b+a); } } }
方法二(上边法四的变形,耗时较长,约468ms,内存占用88.32MB):
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.close(); for(int i=10000;i<1000000;i++){ int flag = 0; String str =""+i; char[] chars=str.toCharArray(); for(int j=0;j<chars.length/2; j++) { //判断第0个是否等于第n-0个,第1个是否等于第n-1个,n-( )=j flag = j; if(chars[j] != chars[chars.length-1-j]) break; flag++;//flag用来获取位置,判断前一半是否等于后一半 } //判断前一半是否等于后一半 if(flag>=chars.length/2) { //如果相等再循环相加判断是否等于输入的值 int sum=0; for(int z=0;z<chars.length;z++) { sum = sum + chars[z]-'0'; } if(sum==num) System.out.println(str); } } } }