我在尝试计算一个数字是否为palaindrome时遇到错误?

时间:2017-11-22 12:35:05

标签: java algorithm

这是我的代码:

public static void main(String[] args) {
    int number;
    System.out.println("Enter here:  ");
    Scanner sc = new Scanner(System.in);
    number = sc.nextInt();
    int reverse=0;

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

    if (number == reverse ) {
        System.out.println("the number is palaindrome " + reverse);
    } else {
        System.out.println("the number is not palaindrome " + reverse);
    }
}

每次我,即使输入是回文,该数字也不是回文输出。

5 个答案:

答案 0 :(得分:2)

因为您要更新number

将其存储在本地,然后在while循环中进行操作。

    int lNum = number;
    while(number!=0) {
                int rel = number%10;
                reverse = (reverse*10)+ rel;
                number= number/10;
    }

    if (lNum == reverse ) {
                System.out.println("the number is palaindrome "+reverse );
    }else
                System.out.println("the number is not palaindrome "+reverse);

请参阅here更正后的工作。

答案 1 :(得分:2)

您正在更新while循环中的原始编号(编号)。 所以在if语句中,数字永远不会等于反向。

将您的号码保存在临时变量中,以便在while循环中使用它。 你的最终代码应该是这样的。

int temp = number;


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

    if (number == reverse ) {
        System.out.println("the number is palaindrome "+reverse );
    }else
        System.out.println("the number is not palaindrome "+reverse);

希望这能解决你的问题。

答案 2 :(得分:0)

您需要保持当前值( temp ),然后将您保存的实际值(temp)与反向值进行比较,下面我分享了我在本地尝试过的代码。

import java.util.Scanner;

public class Stack1 {
    public static void main(String[] args) {
        int number;
        System.out.println("Enter here:  ");
        Scanner sc = new Scanner(System.in);
        number = sc.nextInt();
        int reverse = 0;

        int temp = number;

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

        String resMessage = temp == reverse ? "the number is palaindrome " + reverse
            : "the number is not palaindrome " + reverse;

    System.out.println(resMessage);
    }
}

只是一个建议,如果你在SO上提问,那么试着简要介绍一下你在寻找什么。这将有助于其他人为您提供最佳解决方案。

希望这会有所帮助。

答案 3 :(得分:0)

这种情况正在发生,因为您在此处重新分配号码number = number/10;。 您可以保存对number的引用,并在此if (numberRef == reverse ) {处理,如下所示:

public static void main(String[] args) {
int number;
System.out.println("Enter here:  ");
Scanner sc = new Scanner(System.in);
number = sc.nextInt();
int numberRef = number;
int reverse=0;

while(number != 0) {
    int rel = number%10 == 0 ? 0 : number % 10;
    reverse = (reverse*10) + rel;
    number= number/10;
}

if (numberRef == reverse ) {
    System.out.println("the number is palaindrome "+reverse );
}  else
    System.out.println("the number is not palaindrome " + reverse);

    /*Everytime I am getting the number is not palaindrome output even if the input is palaindrome.*/

 }

答案 4 :(得分:0)

因为while循环后number变量为0。而你也检查它。 0 ==反向。

它是你代码中的问题。是否可以作为字符串输入?然后有一个小解决方案。