怎样判断一个数是不是回文数?如12321,25652...

解决方案 »

  1.   

    提供个思路,一个数,转换成字符串,然后截取两半,其中一半倒序输出与另一半做equals比较
    如果是奇数位,舍掉中间的数字,偶数位正好
      

  2.   


    import java.util.Scanner;class Judgement { // 判断十进制整数是回文数,成功返回true,失败返回false public boolean Judgement1(int n) {
      int k, a, m = 0, 位数 = 0;  k = n;  do {
       a = k % 10;   m = m * 10 + a;   k = k / 10;
       位数 += 1;  } while (k != 0);  return (n == m);
     }
    }// 判断显示回文数的用户交互程序class 回文 {
     public static void main(String args[]) {
      // 创建判断回文数的对象实例  Judgement jt = new Judgement();  // 从终端输入一个整数  int value; // 将要输入的整数值  System.out.println("输入一个整数值,再回车:");  Scanner cin = new Scanner(System.in);  value = cin.nextInt();  // 使用判断回文数的对象实例,判断回文,并输出
      System.out.println("从0到输入的整数");
      System.out.println(value);
      System.out.println("之间,整数都是回文数的为:");
      for (int i = 0; i < value; i++) {
       if (jt.Judgement1(i))
        System.out.println(i);
      }
     }

      

  3.   

      欢迎你去我blog
        我总结过了
      以前有人发帖子问什么是回文数。
      

  4.   

    回文数:http://en.wikipedia.org/wiki/Palindromic_numberpublic class TestPalindromic {    public static void main(String[] args) {
            System.out.println(isPalidromic(1234321));
        }    /**
         * 判断指定的整数是不是回文数。
         *
         * @param l 整数
         *
         * @return 如果是回文数则返回 true
         */
        private static boolean isPalidromic(long l) {
            String str = String.valueOf(l);        int pointer = 0;
            int pointer2 = str.length() - 1 - pointer;
            
            while (pointer < pointer2) {
                if (str.charAt(pointer) != str.charAt(pointer2)) {
                    return false;
                }            pointer++;
                pointer2 = str.length() - 1 - pointer;
            }        return true;
        }
    }
      

  5.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test { public static boolean checkPalindromic(int n)
    {
    String s = String.valueOf(n);
    int l = s.length();
    char[] t = new char[l];
    for(int i=0;i<s.length();i++)
    {
    t[--l]=s.charAt(i);
    }
    String b = String.valueOf(t);

    return s.equals(b);
    }
    public static void main(String[] s)
    {
    for(int i=1;i<1000;i++)
    {
    if(Test.checkPalindromic(i))
    System.out.println(i);
    }




    }
      

  6.   

    再来个效率稍微高些的
    public class Test {
    public static boolean checkPalindromic(int n)
    {
    //w:数字位数 
    int w=0,temp=n;
    while(temp!=0)
    {
    w++;
    temp/=10;
    }
    if(w%2==0){
    int d = w/2;
    int tmp=0;
            while(d--!=0)
            {
             temp=n%(n/10*10);
             int p = d;
               while(p--!=0)
               {
                temp*=10;
               }
               tmp+=temp;
               n/=10;
            }
    return tmp==n;
    }
    else
    {
    int d = w/2;
    int tmp=0;
            while(d--!=0)
            {
             temp=n%(n/10*10);
             int p = d;
               while(p--!=0)
               {
                temp*=10;
               }
               tmp+=temp;
               n/=10;
            }
    return tmp==n/10;
    }

    } public static void main(String[] s)
    {
    for(int i=1;i<1000;i++)
    {
    if(Test.checkPalindromic(i))
    System.out.println(i);

    }
            }
    }
      

  7.   


        public static void main(String args[]) {
           for(int i=1;i<1000;i++)
            {
                if(checkPalindromic(i))
                    System.out.println(i);
                
            }    }     static boolean checkPalindromic(int n){
            int k=n<0?-n:n;
            if(n<10)
                return false;
            return Integer.parseInt(new StringBuffer(""+k).reverse().toString())==k;
        }
      

  8.   

    再完善一下,加上注释public static boolean checkPalindromic(int n)
    {
    //w:数字位数 ,这个循环用来求得数的位数
    int w=0,temp=n;
    while(temp!=0)
    {
    w++;
    temp/=10;
    }
    //d:求得位数的一半长
    int d = w/2;
    int tmp=0;
    //求出一个数后一半的倒序,并且经过此循环n存放的是截去后一半的结果
    //例:奇数位:12321  求出的tmp=12, n=123
    //    偶数位:598895  求出的tmp=598, n=598
    while(d--!=0)
        {
            temp=n%(n/10*10);
            int p = d;
            while(p--!=0)
            {
               temp*=10;
            }
            tmp+=temp;
            n/=10;
        }
    //判断位数w的奇偶
    if(w%2==0){
    return tmp==n;
    }
    else
    {
    return tmp==n/10;
    }

    }
      

  9.   

    参照这位大牛,再次修改        public static boolean checkPalindromic2(int n)
    {
    //w:数字位数 ,这个循环用来求得数的位数
    int w=0,temp=n;
    while(temp!=0)
    {
    w++;
    temp/=10;
    }
    //d:求得位数的一半长
    int d = w/2;
    int tmp=0;
    //求出一个数后一半的倒序,并且经过此循环n存放的是截去后一半的结果
    //例:奇数位:12321  求出的tmp=12, n=123
    //    偶数位:598895  求出的tmp=598, n=598
    while(d--!=0){
            temp = n%10;
            tmp = tmp*10+temp;
            n/=10;
        }
    //判断位数w的奇偶
    if(w%2==0){
    return tmp==n;
    }
    else
    {
    return tmp==n/10;
    }
    }
      

  10.   

    public boolean isPalindrome(char[] text){
        boolean flag = true ;
        int i = 0; 
        int textLen = 0 ;
        if (null != text){
          textLen = text.length ;
        }else{
          return false ;
        }
        int middle = (textLen-1)/2 ;
        for(i = 0; i <= middle ; i++){
          if(text[i] != text[textLen-i-1]){        
            flag = false ;
            break ;
          }
        }
        return flag ;
      }
      

  11.   

    高效回文判断方法
    public boolean isPalindrome(char[] text){
        boolean flag = true ;
        int i = 0; 
        int textLen = 0 ;
        if (null != text){
          textLen = text.length ;
        }else{
          return false ;
        }
        int middle = (textLen-1)/2 ;
        for(i = 0; i <= middle ; i++){
          if(text[i] != text[textLen-i-1]){        
            flag = false ;
            break ;
          }
        }
        return flag ;
      }为什么说是高效的呢,请听我详解: 一、循环的次数是由middle决定的,而不是(text.lengh-1/2),这样不用每次循环都会重新计算,因为每一次循环都是要重新计算条件约束,重新判断的。如果用i<=textLen-i-1做为判断条件则速度可能会不只慢一倍。二、一个入口一个出口,符合软件工程结构化程序设计思想。三、在text==null的情况下不会继续判断,可以防止空指针错误。四、初始是设flag=true,而不是false,减少了很多复杂的判断,不信大家可以把初始条件flag=false试试,一定繁锁的多。
      

  12.   


    public class Test2 { public static void main(String[] args) {
    int i = 12321;
    String s = String.valueOf(i);
    System.out.println(checkPalindrome(s));
    }

    public static boolean checkPalindrome(String s){
        if(s.length() <= 1){
            return true;
        }else if(!(Character.toString(s.charAt(0))).equals(Character.toString(s.charAt(s.length() - 1)))){
            return false;
        }else{
            return checkPalindrome(s.substring(1, s.length() - 1));
        }
    }
    }
      

  13.   

    http://blog.sina.com.cn/s/blog_46f224ea0100097a.html比较详细!!!
      

  14.   

    学习了,经验实在是太重要了
    初学者一般只想到循环,好一点的想到用递归,难得想到用StringBuffer.reverse()啊
      

  15.   

    给你个程序就是来判断是不是回文数字的。
    package majian;
    import java.applet.*;
    import java.awt.*;
    public class huiwen extends Applet{
       Label lab;
       TextField input;
       long num;int i,j,m=0;long number[];
       
       
       
       public void init(){
       lab=new Label("请输入一个数字");
       input=new TextField(10);
       
       add(lab);add(input);
       }
       public  boolean action(Event e,Object o){
      if(e.target==input){
      num=Integer.parseInt(input.getText());
      if(num>=10e13)
      j=14;
      else if(10e13>num&&num>=10e12)
          j=13;
          else if(num>=10e11&&num<10e12)
      j=12;
      else if(num>=10e10&&num<10e11)
      j=11;
      else if(num>=10e9&&num<10e10)
      j=10;
      else if(num>=100000000&&num<1000000000)
      j=9;
      else if(num>=10000000&&num<100000000)
      j=8;
      else if(num>=1000000&&num<10000000)
      j=7;
      else if(num>=100000&&num<1000000)
      j=6;
      else if(num>=10000&&num<100000)
      j=5;
      else if(num>=1000&&num<10000)
      j=4;
      else if(num>=100&&num<1000)
      j=3;
      else if(num>=10&&num<100)
      j=2;
      else if(num>=1&&num<10)
      j=1;
           number=new long[(int)j];
      for(i=0;i<j;++i){
      number[i]=num%10;
      num=num/10;
      }
      
      for(i=0;i<=j/2;++i){
      if(number[i]==number[j-1-i])
      ++m;
      }
      if(m>j/2)
       showStatus("该数是回文数字!");
      else showStatus("该数不是回文数字!");
      }
      return true;
       }
    }