如何在不交换 .12 和 0.12 的情况下对大十进制进行排序?



.12 和 0.12 在按降序排序时被交换。实际上,如果存在相同的数字,则必须按照接收顺序打印它们。

Java的BigDecimal 类可以处理任意精度的有符号十进制 数字。让我们测试您对它们的了解!

给定一个数组,sn实数字符串,按降序排序 订购 - 但等等,还有更多!每个数字必须打印在 与从 stDIN 读取的格式完全相同,这意味着.1打印为.10.1打印为0.1。如果两个数字代表 数值等效值(例如.1==0.1),则必须列出它们 按照与接收它们作为输入相同的顺序)。

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] s = new String[n + 2];
for (int i = 0; i < n; i++) {
s[i] = sc.next();
}
sc.close();
BigDecimal[] d = new BigDecimal[n];
for (int i = 0; i < n; i++) {
d[i] = new BigDecimal(s[i]);
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (d[j].compareTo(d[i]) == 1) {
BigDecimal t = d[i];
d[i] = d[j];
d[j] = t;
String stmp = s[i];
s[i] = s[j];
s[j] = stmp;
}
}
}
// Output
for (int i = 0; i < n; i++) {
System.out.println(s[i]);
}

输入:

9
-100
50
0
56.6
90
0.12
.12
02.34
000.000

预期产出:

90
56.6
50
02.34
0.12
.12
0
000.000
-100

实际输出:

90
56.6
50
02.34
.12
0.12
0
000.000
-100

我重新命令尝试这样的代码:

import java.math.BigDecimal;
import java.util.*;
class Solution{
public static void main(String []argh)
{
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
String []s=new String[n];

for(int i=0;i<n;i++)
{
s[i] = sc.next();
}

Arrays.sort(s, new Comparator<Object>() {
@Override
public int compare(Object a1, Object a2) {
BigDecimal bigDec1 = new BigDecimal((String)a1);
BigDecimal bigDec2 = new BigDecimal((String)a2);
return bigDec2.compareTo(bigDec1);
}
});

for(int i=0;i<n;i++)
{
System.out.println(s[i]);
}
}

}

使用比较器的简单排序即可解决所有问题。

相关内容

  • 没有找到相关文章

最新更新