gpt4 book ai didi

java - Java 中的大数比较

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:23 27 4
gpt4 key购买 nike

这是 BigDecimal 比较的问题还是预期的输出错误?

import java.math.*;
import java.util.*;
class Solution{

public static void main(String []argh)
{

int res;
String temp = "";
Scanner sc= new Scanner(System.in);
MathContext mc = new MathContext(100, RoundingMode.FLOOR);
int n=sc.nextInt();
String []s=new String[n+2];
for(int i=0;i<n;i++)
{
s[i]=sc.next();
}

for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
res = new BigDecimal(s[i], mc).compareTo(new BigDecimal(s[j], mc));
if(res == 1){
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}

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

}
}
Sample Input:     9 -100 50 0 56.6 90 0.12 .12 02.34 000.000

Expected Output: 90 56.6 50 02.34 0.12 .12 0 000.000 -100

My Output: 90 56.6 50 02.34 .12 0.12 0 000.000 -100

最佳答案

那都是因为比较的顺序

您的算法正在向左侧复制更大的值。让我们考虑每次迭代后字符串数组的状态。当 i=0 数组将是:

i=0: -100 50 0 56.6 90 0.12 .12 02.34 000.000

因为 -100 是最小的,所以留在原处。继续:

i=1: 50 -100 0 56.6 90 0.12 .12 02.34 000.000 

因为 50 大于 -100 它将被复制到左边。继续:

i=2: 50 0 -100 56.6 90 0.12 .12 02.34 000.000 
i=3: 56.6 50 0 -100 90 0.12 .12 02.34 000.000
i=4: 90 56.6 50 0 -100 0.12 .12 02.34 000.000

i=5s[5]0.12 时,您感兴趣的事情将发生:

i=5: 90 56.6 50 0.12 0 -100 .12 02.34 000.000 

0.12 将比 .12 更早进行比较,并将在 0 之前取代它。现在,当 i=6 时,我们将比较 .12:

i=6: 90 56.6 50 0.12 .12 0 -100 02.34 000.000

因为 .12 并不比 0.12 大,而且它比 0.12 比较它会保留在 0.12 的右侧。

因此,BigDecimal 比较没有问题。它以正确的方式工作。

希望我的解释不会太复杂。

关于java - Java 中的大数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35933171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com