题目:
  "回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。 
一个数字,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。如果在30步以外(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。详细描述:
在caculateHuiWenShu函数中实现该功能:/* 功能: * 输入:int 一个小于的进制数 * 输出:把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止,并输出次数,如果次计算不能得到回文数,则输出。 * 返回:      例如:进制则有:     STEP1: 87+78=165     STEP2: 165+561=726     STEP3: 726+627=1353     STEP4: 1353+3531=4884     则输出 4 */输入一个0<=m的非回文数,输出为计算的步数 异常情况返回0
输入样例:
78
返回值样例:
    4
public static long  caculateHuiWenShu(int input)  
{  
if(input<0)
{
return (long)0;
}

    StringBuffer sb=new StringBuffer();
    sb.append(input);
    long result=0;
    for(long i=0;i<30;i++){
     result=(Long.valueOf(sb.toString())+Long.valueOf(sb.reverse().toString()));
     sb.setLength(0);
     sb.append(result);
     if(result==Long.valueOf(sb.reverse().toString())){
     return (long)(i+1);
     }
     sb.setLength(0);
     sb.append(result);
    }
    return (long)0;
}
题目和我的代码如上。但是测试案例没有完全通过,因为看不到测试案例,自己也找不到错误,希望有人帮忙解答一下,谢谢。

解决方案 »

  1.   

    既然用了StringBuffer 里的reverse方法多好呀,你这一坨子代码,看着就累!!我的思路就是封装好方法直接用,返回数不等,就继续加,循环30次,判断一下,即可!!这题并不是很复杂!
      

  2.   


    /*
     * 题目:
      "回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。 
    一个数字,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,
    如果不是,则重复这个操作,直到和为回文数为止。如果在30步以外(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。详细描述:
    在caculateHuiWenShu函数中实现该功能:功能:
     * 输入:int 一个小于的进制数
     * 输出:把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,
     * 如果不是,则重复这个操作,直到和为回文数为止,并输出次数,如果次计算不能得到回文数,则输出。
     * 返回:
          例如:进制则有:
         STEP1: 87+78=165
         STEP2: 165+561=726
         STEP3: 726+627=1353
         STEP4: 1353+3531=4884
         则输出 4
    输入一个0<=m的非回文数,输出为计算的步数 异常情况返回0
    输入样例:
    78
    返回值样例:
    4
     */public class Test1 {
    public static void main(String[] args) {
    long value = calcPlalindrome(78);
    System.out.println(value);
    } static int calcPlalindrome(int num) {
    final int err = 0;// 异常返回值
    final int MAX_STEP = 30;// 最大步数
    if (num < 0 || isPlalindrome(num)) {
    return err;
    }
    for (int i = 1; i <= MAX_STEP; ++i) {
    int reverseNum = getReverseNum(num);
    System.out.printf("STEP%d: %d+%d=%d\n", i, num, reverseNum, num
    + reverseNum);
    num += reverseNum;
    if (isPlalindrome(num))
    return i;
    }
    return 0;
    } /*
     * 把一个数的各位数字上数字倒过来排列组成一个新数
     */
    static int getReverseNum(int num) {
    int newNum = 0;
    while (num > 0) {
    int n = num % 10;
    newNum *= 10;
    newNum += n;
    num /= 10;
    }
    return newNum;
    } /*
     * 判断是否为回文数
     */
    static boolean isPlalindrome(int num) {
    return num == getReverseNum(num);
    }
    }
      

  3.   

    CSDN居然能把代码显示成注释的颜色!无力吐槽
    重新贴下代码public class Test1 {
    public static void main(String[] args) {
    long value = calcPlalindrome(78);
    System.out.println(value);
    } static int calcPlalindrome(int num) {
    final int err = 0;// 异常返回值
    final int MAX_STEP = 30;// 最大步数
    if (num < 0 || isPlalindrome(num)) {
    return err;
    }
    for (int i = 1; i <= MAX_STEP; ++i) {
    int reverseNum = getReverseNum(num);
    System.out.printf("STEP%d: %d+%d=%d\n", i, num, reverseNum, num
    + reverseNum);
    num += reverseNum;
    if (isPlalindrome(num))
    return i;
    }
    return 0;
    }    //把一个数的各位数字上数字倒过来排列组成一个新数
    static int getReverseNum(int num) {
    int newNum = 0;
    while (num > 0) {
    int n = num % 10;
    newNum *= 10;
    newNum += n;
    num /= 10;
    }
    return newNum;
    } //判断是否为回文数
    static boolean isPlalindrome(int num) {
    return num == getReverseNum(num);
    }
    }
      

  4.   

    练了下手,不晓得符合要求不:
    public class ReverseNum
    {    private static int times = 0;    public static void processNum(int num)
        {
            if (num < 0)
            {
                System.out.println("请输入非负整数。");
                return;
            }
            BigDecimal bd = new BigDecimal(num);
            StringBuilder sb = new StringBuilder(5);
            StringBuilder bs = new StringBuilder(5);        while (times++ <= 30)
            {
                sb.append(bd);
                bs.append(bd).reverse();
                if (sb.toString().equals(bs.toString()))
                {
                    System.out.println("经过" + (times - 1) + "次操作,得到回文数:" + sb);
                    return;
                }            bd = bd.add(new BigDecimal(bs.toString()));
                System.out.println("Step " + times + ":" + sb + " + " + bs + " = " + bd);
                sb.setLength(0);
                bs.setLength(0);
            }        System.out.println("超过三次,没能找到回文数。。");
        }    public static void main(String[] args)
        {
            int num = 0;
            System.out.print("请输入非负整数:");
            Scanner sc = new Scanner(System.in);
            try
            {
                num = Integer.valueOf(sc.next());
            }
            catch (Exception e)
            {
                System.out.println("输入的数字不合法!");
            }        processNum(num);
        }
    }