如何在不形成回文的情况下反转数字

时间:2015-12-29 05:56:08

标签: java

我正在努力解决挑战。这是我能够做到的,但我还没有能够获得100%的工作代码

我做错了吗?

问题:

  

问题如下:选择一个数字,反转其数字并添加   它到原来的。如果总和不是回文(这意味着,它是   从左到右,从右到左不是相同的数字),重复一遍   过程

import java.io.*;
    public class Reverse_and_add {

        public static void main (String[] args) throws IOException {
            File file = new File("addition.txt");
            BufferedReader buffer = new BufferedReader(new FileReader(file));
            String line;
            while ((line = buffer.readLine()) != null) {
                line = line.trim();
                String[] addition = line.split(" ");
                int[] myAddition = new int[addition.length];
                int convert = 0;
                for (int i = 0; i < myAddition.length; i++) {
                    myAddition[i] = Integer.parseInt(addition[i]);
                    convert = myAddition[i];
                }
               int  result=0;
               int count =0;
               result = convert + reverse(convert);
                   do {
                     result = result + reverse(result);
                     System.out.println(count+" "+result);
                     count++;
                   } while (result != reverse(result));


            }
        }

        public static int reverse(int n){
            int reverse = 0;
            while( n != 0 )
              {
                  reverse = reverse * 10;
                  reverse = reverse + n%10;
                  n = n/10;
              }
            return reverse;
        }

    }

2 个答案:

答案 0 :(得分:1)

要完成此问题,您必须将其分解。有三个部分,反转它,检查它是否是回文,并添加到完成。我几乎解决了这个问题,然后在下面的代码中实现了它。请注意:方法isPalindrome()reverseInt()的实现取自其他SO线程。 但是,您实现了解决问题的价值取决于您。

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int num = 54; //THis can be whatever you want
        while(!isPalindrome(Integer.toString(num))){
            int n = reverseInt(num);
            num +=n;
        }
        System.out.println(num);
    }
    //Checks if a number is a string is a palindrome
    public static boolean isPalindrome(String str) {
        return str.equals(new StringBuilder(str).reverse().toString());
    }

    //Takes an int, reverses it
    public static int reverseInt(int input)
    {
        long reversedNum = 0;

        long input_long = input;

        while (input_long != 0)
        {
            reversedNum = reversedNum * 10 + input_long % 10;
            input_long = input_long / 10;
        }

        if (reversedNum > Integer.MAX_VALUE || reversedNum < Integer.MIN_VALUE)
        {
            throw new IllegalArgumentException();
        }
        return (int)reversedNum;
    }
}

答案 1 :(得分:0)

这个问题就在这里:

result = convert + reverse(convert);
    do {
        result = result + reverse(result);
        //
    }

它将反转该数字并连续两次添加,而不检查。例如,如果您的数字是7,那么do..while之前的行将使结果等于14,而do..while中的第一行将使其等于55.这是无意的,因为14显然是不是回文,这意味着程序应该停止,而是完全跳过它。