如何反转4位数字(java)

时间:2015-11-28 19:34:14

标签: java

这是我在下面的代码;

 int reverse = 0;

     while( num != 0 )
      {
      reverse = reverse * 10;
      reverse = reverse + num%10;
      num = num/10;

    }

    System.out.println(reverse);

如果我输入:1234它将显示4321

但如果我输入0044

它将输出44

我想输出4400

我应该输入什么?

5 个答案:

答案 0 :(得分:3)

由于leadig零在int中没有意义,你必须将你的输入读作String并反转该String以保持前导零(并将它们变成尾随零)。

答案 1 :(得分:1)

问题是你的循环大小,而不是你的逻辑。 假设你的所有数字都是4位数,那么

 int reverse = 0;

 int i;
 for( i = 0; i < 4 ; i++ )
  {
  reverse = reverse * 10;
  reverse = reverse + num%10;
  num = num/10;

}

System.out.println(reverse);

将起作用

答案 2 :(得分:0)

您可能必须尝试使用​​字符串来实现此目的。 试试下面的代码

 import java.util.Scanner;
 public class Reverse 
  {

   public static void main(String[] args) 
   {

     Scanner in = new Scanner(System.in);
     System.out.print("Enter a number: ");
     StringBuilder number=new StringBuilder(in.next());
     System.out.println(number.reverse());
   }
 }

希望这会有所帮助:)

现在,如果你想找到反转数字和输入数字之间的差异

 import java.util.Scanner;

 public class Reverse {

  public static void main(String[] args) {
    int a;
    Scanner in = new Scanner(System.in);
    System.out.print("Enter a number: ");
    String number=in.next();
    StringBuilder numbertoRev=new StringBuilder(number);
    try{
    int a=Integer.valueOf(number);
    }catch(NumberFormatException e)
    {
       System.out.println("not a number :)");
       return;
    }
    int b=Integer.valueOf(numbertoRev.reverse().toString());
    System.out.println(b-a);
}

这是我从你的问题中理解的。请原谅我,如果这不是你想要的:)

答案 3 :(得分:0)

你几乎就在那里,你只需要完全循环4次。您还应该防止错误数据,并且您应该将数字打印为4位数字:

if (num < 0 || num > 9999)
    throw new IllegalArgumentException("Not a 4-digit number: " + num);
int reverse = 0;
for (int i = 0; i < 4; i++, num /= 10)
    reverse = reverse * 10 + num % 10;
System.out.printf("%04d%n", reverse);

当然,您也可以使用字符串操作来实现:

if (num < 0 || num > 9999)
    throw new IllegalArgumentException("Not a 4-digit number: " + num);
String reverse = new StringBuilder(String.format("%04d", num)).reverse().toString();
System.out.printf(reverse);

如果需要,可以增强这两种方法以支持5位以上。

<强>跟进

第九尾回答:

  

如果我想要4321(反向号码) - 1234(输入号码)我该怎么办?

上面的第一个版本是最好的,因为你已经有了数字,只需稍加改动就可以保留原始输入:

if (input < 0 || input > 9999)
    throw new IllegalArgumentException("Not a 4-digit number: " + input);
int reverse = 0;
for (int i = 0, num = input; i < 4; i++, num /= 10)
    reverse = reverse * 10 + num % 10;
System.out.printf("Reverse: %04d%n", reverse);
System.out.printf("Difference: %04d%n", reverse - input);

答案 4 :(得分:0)

如果要包含“0044”和类似情况,则应将输入视为字符串。只要您需要该号码,就可以将其转换为整数。试试这个:

public class ReverseNumber {

    static int reverse = 0;

    public static void main(String[] args) {

        String num = "0044";
        String temp = new StringBuilder(num).reverse().toString();
        reverse = Integer.valueOf(temp);
        System.out.println(reverse);

    }

}

我希望它有所帮助。