逆转整数以检查回文数

时间:2014-04-11 18:14:31

标签: java palindrome

我已经查看了几个不同的堆栈问题并用Google搜索,但我读过的内容并没有真正解决整数的反转问题,而只是字符串。

所以现在我的代码可能会或可能根本不起作用,这可能是你见过的最愚蠢的事情,并且欢迎和更正,但我希望我的代码将要做的是通过100 - 999乘以两个整数然后检查它是否是回文。带有reverse.equals(sum)的if是完全伪代码,显然不会起作用,但我无法弄清楚如何检查回文int。有一个简单的方法吗?我已经阅读了一些相当漫长而复杂的方法,但我确信这是一个简单的方法。也许不吧。 :/。无论如何,这是我的代码。

public class PalandromicNum {
    public static void main(String[] args){
        int numOne = 100;
        int numTwo = 100;
        int toteVal;
        int counter = 1000;
        int sum = 0;
        int finalSum = 0;

        for(int i=0; i<counter; i++){
            toteVal = numOne * numTwo;
            numTwo++;

            if(numTwo == 999){
                numOne++;
                numTwo = 100;
            }

            if(toteVal < sum){
                sum += toteVal;
                if(reverse.equals(sum)){
                    finalSum = sum;
                    System.out.println(finalSum);
                }
            }
        }
    }
}

提前再次感谢!

4 个答案:

答案 0 :(得分:2)

这是在我的手机上,对任何错误感到抱歉。

将您的号码转换为字符串并:

public static boolean isPalindrome(String str)
{
    // base recursive case
    if (str.length <= 1) {
        return true;
    }
    // test the first and last characters
    char firstChar = str.charAt(0);
    char lastChar = str.charAt(str.length - 1)  // subtract 1 as indexes are 0 based
    if (!firstChar.equals(lastChar)) {
        return false;
    }
    // if the string is longer than 2 chars and both are equal then recursively call with a shorter version
    // start at 2nd char, end at char before last
    return isPalindrome(str.substring(1,str.length);
}

答案 1 :(得分:0)

反转整数非常简单。请记住mod 10给你最后一位数字。在它上面循环,一次砍掉第一个数字的最后一个数字并将其添加到新数字的反转。然后是简单integer equality

的问题
int rev = 0;
int n = sum;
while(n)
{
   rev = rev*10 + n%10;
   n /= 10;
}
if(sum==rev)
   //palindrome
else
   //no no no no.

答案 2 :(得分:0)

您可以创建一个名为isPalindrome的函数来检查数字是否为回文结构。 在代码中使用此功能。 您只需将要检查的号码传递给此功能即可。 如果结果为真,那么该数字是回文。 否则,它不是回文。

public static boolean isPalindrome(int number) {
            int palindrome = number; // copied number into variable
            int reverse = 0;

            while (palindrome != 0) {
                int remainder = palindrome % 10;
                reverse = reverse * 10 + remainder;
                palindrome = palindrome / 10;
            }

            // if original and reverse of number is equal means
            // number is palindrome in Java
            if (number == reverse) {
                return true;
            }
            return false;
        }

    }

答案 3 :(得分:0)

我相信如果你想知道有多少回文在100-999之间,这段代码可以帮助你。当然,它会对回文数量进行两次计算,因为它会考虑回文的两种排列。如果我是你,我会开始创建方法来完成你的大部分工作,因为它使调试更容易。

  int total = 100;
  StringBuilder stringSumForward;
  StringBuilder stringSumBackward;
  int numberOfPals = 0;


  for(int i = 100; i < 999; i++){
     for(int j = 100; j < 999; j++){
        total = i * j;
        stringSumForward = new StringBuilder(String.valueOf(total));
        stringSumBackward = new StringBuilder(String.valueOf(total)).reverse();

        if(stringSumForward.toString().equals(stringSumBackward.toString())){
           numberOfPals++;
        }
     }
  }