簡體   English   中英

僅在反轉Java中的數字時保持前導零

[英]keep leading zeros only while reversing a number in java

我正在做我的分配問題,它是“反轉數字保留前導零,除去尾隨零也保持原樣”。

如果我將其取為整數,則將刪除前導和尾隨的零,如果我將其取為字符串,則將保留所有零。 誰能幫我只保留前導零。

例如,“-00360”應為“ -6300”。

問題-

編寫Java函數以接受數字並返回相同的數字。 如果數字以一個或多個零結尾,則在反向數字中將不存在這些零(因為這些零成為前導零)。 如果輸入數字為負,則應保留符號。 ##示例輸入:-123輸出:-321輸入:1123400輸出:43211

在以下代碼中,您可以反轉負數和正數。 在方法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);
        }

    }

}

正如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>D(int)<int>F 請參閱代碼中的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM