【问题标题】:keep leading zeros only while reversing a number in java仅在Java中反转数字时保持前导零
【发布时间】:2018-06-30 08:34:54
【问题描述】:

我正在做我的作业问题,即“反转数字保持前导零并删除尾随零也保持符号原样”。

如果我将其反转为整数,它将删除前导零和尾随零,如果我将其反转为字符串,它将保留所有零。 谁能帮我只保留前导零。

例如“-00360”应该是“-6300”。

问题-

编写一个 Java 函数来接受一个数字并返回它的倒数。如果数字以一个或多个零结尾,则在反转的数字中,这些零将不存在(因为这些零成为前导零)。如果输入数字为负数,则应保留符号。 ##Examples 输入:-123 输出:-321 输入:1123400 输出:43211

【问题讨论】:

  • 到目前为止你尝试过什么?您的具体编程问题是什么?
  • String s = new StringBuilder("00360").reverse().toString().replaceFirst("^[0]+" "");
  • 另一个问题,@Dan 如果我将使用字符串反转它,我将如何保留标志?
  • U 会使用某种循环(for、while..)和 if 语句来解决它

标签: java


【解决方案1】:

在下面的代码中,您可以反转负数和正数。在方法reversedString(String num) 上,您可以反转您的数字。 String reverseNumKeeper() 帮助您保留新的反转号码。使用for循环,你反转数字,123 => 321。然后,你应该检查新的反转字符串是否有负号,如果有,你应该在数字前面添加它,否则,只返回新的反转数字。

import java.util.Scanner;

public class Reverse {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter number");
        //input
        String number = scanner.next();

        System.out.println(Reverse.reversedString(number));

    }

    private static String reversedString(String num) {

        String reverseNumKeeper = "";
        //reverse number with and without negative sign
        for (int i = num.length(); i > 0; i--) {
            reverseNumKeeper += num.charAt(i - 1);
        }

        //check if reverseNumKeeper has a negative sign or not
        if (reverseNumKeeper.contains("-")) {
            return "-" + Integer.parseInt(reverseNumKeeper.replace("-", ""));
        } else {
            return "" + Integer.parseInt(reverseNumKeeper);
        }

    }

}

【讨论】:

  • 这样我也会在输出中有尾随零。我只需要前导零,例如。 “-0360”->“-0630”但我需要“-360”
  • @anmolhans,您在帖子中提到:例如“-00360”应该是“-6300”。我编写的代码也输出-6300。 Enter number-0360-630
【解决方案2】:

正如YCF_L 所说,您可以使用带有负数的StringBuilder 并没有太大区别。您可以包括一张支票。

public class FunWithNumbers {
    public static int numberReverser(String number) {
        System.out.println("Input: " + number);

        int returnVal;
        String returnString;
        boolean negative = false;

        //If minus is always at the start if it is there
        if(number.substring(0, 1).equals("-")) {
            negative = true;
        }

        if(negative) {
            returnString = new StringBuilder(number.substring(1, number.length() - 1)).reverse().toString().replaceFirst("^[0]+", "");
            returnString = "-" + returnString;
        } else {
            returnString = new StringBuilder(number).reverse().toString().replaceFirst("^[0]+", "");
        }

        try {
            returnVal = Integer.parseInt(returnString);
        } catch (NumberFormatException nFE) {
            System.out.println("There was a number format exception");
            returnVal = -1;
        }

        System.out.println("Output: " + returnVal + "\n");
        return returnVal;
    }

    public static int numberReverser(int number) {
        return numberReverser(Integer.toString(number));
    }

    public static void main(String[] args) {
        //Usage
        FunWithNumbers.numberReverser("003600");
        FunWithNumbers.numberReverser("-003600");

        FunWithNumbers.numberReverser((int)0036000D);
        FunWithNumbers.numberReverser((int)-003600D);
    }
}

输出

Input: 003600
Output: 6300

Input: -003600
Output: -6300

Input: 36000
Output: 63

Input: -3600
Output: -63

您可能会注意到这里有两种输入方式,但只有一种可以为您提供正确的输出。

如果使用String,则第一种方式。这提供了预期的输出。第二种方法,int 不提供预期的输出。这是因为 int 不会存储前导零。同样,如果您尝试输入带有前导零的 int,您实际上可以将其转换为八进制。为避免这种情况,您可以使用(int)<int>D(int)<int>F。见代码中的例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多