我正在做我的分配问题,即“反转数字以保留前导零,除去尾随零也保持正负号”。
如果我将其取为整数,则将删除前导和尾随零,如果我将其取为字符串,则将保留所有零。 谁能帮我只保留前导零。
例如,“-00360”应为“ -6300”。
问题-
编写Java函数以接受数字并返回相同的数字。如果数字以一个或多个零结尾,则在反向数字中将不存在这些零(因为这些零成为前导零)。如果输入数字为负,则应保留符号。 ##示例输入:-123输出:-321输入:1123400输出:43211
答案 0 :(得分:0)
在以下代码中,您可以反转负数和正数。在方法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);
}
}
}
答案 1 :(得分:0)
好吧,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
。参见代码中的示例