题目描述:
给你一个整数 n,请你每隔三位添加点(即 “.” 符号) 作为千位分隔符,并将结果以字符串格式返回。
示例 1:
输入:n = 987
输出:“987”
示例 2:
输入:n = 1234
输出:“1.234”
示例 3:
输入:n = 123456789
输出:“123.456.789”
示例 4:
输入:n = 0
输出:“0”
题目分析:
本题:主要是将一个数,每三位通过小数点(.)进行分割,但是我们需要注意的是,
1、当输入的数据小于3位,就不需要分割。保持原本输出。
//控制最后3位后面没有小数点
if (count == 0) {
st = sd;
} else {
st = sd + "." + st + "";
}
2、当输入的数字是0,就返回“0”。
if (n == 0) {//当n为0的时候,直接返回0
return "0";
}
3、当输入的位数大于3位,但是其中有0的时候,需要保留0。
//当其中有0的时候,控制为3位,补0
if (n >= 1000 && sd.length() < 3) {
if (sd.length() == 0) {
sd = "000";
} else if (sd.length() == 1) {
sd = "00" + sd;
} else {
sd = "0" + sd;
}
}
题目实现:
import java.util.Scanner;
public class Leetcode1556thousandthPercentile {
//千分位
public static String thousandSeparator(int n) {
if (n == 0) {//当n为0的时候,直接返回0
return "0";
}
int count = 0;
String st = " ";
while (n > 0) {
int d = n % 1000;
String sd = String.valueOf(d);
//当其中有0的时候,控制为3位,补0
if (n >= 1000 && sd.length() < 3) {
if (sd.length() == 0) {
sd = "000";
} else if (sd.length() == 1) {
sd = "00" + sd;
} else {
sd = "0" + sd;
}
}
//控制最后3位后面没有小数点
if (count == 0) {
st = sd;
} else {
st = sd + "." + st + "";
}
n /= 1000;
count++;
}
return st;
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
String str = thousandSeparator(n);
System.out.println(str);
}
}
}
注:
本题的解决方法不是唯一,也不是最好的,欢迎指正,一起学习。后面我学到更简单的方法,我会去优化的。