题目大意
输入两个数,判断两个数是否相等。
Sample Input
1 2
2 2
3 3
4 3
Sample Output
NO
YES
YES
NO
注意
虽然样例里给的都是整数,但是,实际上本题本质上考的是大数之间的比较。因为没有确定数据范围和是否为整数所以需要考虑不是整数和超出位数的情况。
- 只需考虑小数点后有多个0的情况,比如1.000 和 1比较
- 不需要考虑前导0,即不会出现0000100
- 不需考虑正负号,即只有无符号数
关于一些Java的函数
public boolean equals(Object x)
比较此 BigDecimal 与指定的 Object 的相等性。与 compareTo ()不同,仅当两个 BigDecimal 对象的值和标度都相等时,此方法才认为它们相等(因此通过此方法进行比较时,2.0 不等于 2.00)。
stripTrailingZeros(),API原文
public BigDecimal stripTrailingZeros()
返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。
例如,从 BigDecimal 值 600.0 中移除尾部零,该值具有的 [BigInteger, scale] 组件等于 [6000, 1],
使用 [BigInteger, scale] 组件生成的 6E2 等于 [6, -2]
返回:数值上等于移除所有尾部零的 BigDecimal。
选择使用该方法,直接用compareTo(),API原文:
public int compareTo(BigDecimal val)将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。
建议使用以下语句执行上述比较:(x.compareTo(y) 0),其中 是六个比较运算符之一。
指定者:
接口 Comparable 中的 compareTo
参数:
val - 将此 BigDecimal 与之比较的 BigDecimal。
返回:
当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。
附上代码:
import java.math.*;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.*;
import java.util.Scanner;
public class Main {
private static BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
private static PrintWriter stdOut = new PrintWriter(System.out, true);
public static void main(String[] args) throws IOException {
Scanner sc= new Scanner(System.in);
while(sc.hasNext()) {
BigDecimal a=sc.nextBigDecimal();//大数类
BigDecimal b=sc.nextBigDecimal();
if(a.compareTo(b)==0)
{
System.out.println("YES");
}
else {
System.out.println("NO");
}
}
}
}
/*好久没写java代码了*/