繁体   English   中英

如何反转4位数字(java)

[英]how to reverse number in 4 digits(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

我应该输入什么?

由于Leadig零在int中没有任何意义,因此您必须将输入读取为String并反转该String才能保留前导零(并将其转换为尾随零)。

问题是循环大小,而不是逻辑。 假设您所有的数字都是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);

将工作

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

 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);
}

这是我从您的问题中了解的。 如果这不是您要的内容,请原谅我:)

您快到了,只需要循环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);

当然,您也可以使用String操作来做到这一点:

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);

如果要包括“ 0044”和类似的情况,则应将输入视为字符串。 每当您需要该数字时,都可以将其转换为Integer。 尝试这个:

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);

    }

}

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM