A == B ?
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 88315 Accepted Submission(s): 13940
Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
Input
each test case contains two numbers A and B.
Output
for each case, if A is equal to B, you should print "YES", or print "NO".
Sample Input
1 2 2 2 3 3 4 3
Sample Output
NO YES YES NO
Author
8600 && xhd
Source
PS:原来以为是水题就没有做,后来才发现是大数,就想用Java 里的 BigDecimal里的 equals方法去判断,提交后竟然WA,查看API才知道不行,API原文:
public boolean equals(Object x)
比较此 BigDecimal 与指定的 Object 的相等性。与 compareTo ()不同,仅当两个 BigDecimal 对象的值和标度都相等时,此方法才认为它们相等(因此通过此方法进行比较时,2.0 不等于 2.00)。
比较此 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。
返回:数值上等于移除所有尾部零的 BigDecimal。
其实还有更简单的方法,直接用compareTo(),API原文:
public int compareTo(BigDecimal val)将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。
建议使用以下语句执行上述比较:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。
指定者:
接口 Comparable<BigDecimal> 中的 compareTo
参数:
val - 将此 BigDecimal 与之比较的 BigDecimal。
返回:
当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。
指定者:
接口 Comparable<BigDecimal> 中的 compareTo
参数:
val - 将此 BigDecimal 与之比较的 BigDecimal。
返回:
当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。
AC代码1:
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
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");
}
/**
a = a.stripTrailingZeros();
b = b.stripTrailingZeros();
if (a.equals(b)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
*/
}
}
}
AC代码2:
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
char a[100000],b[100000];
void change(char s[])
{
int i,len;
len = strlen(s);
if(strstr(s,"."))//含有小数点
{
for(i = len-1; s[i] == '0'; i--)//去掉小数末尾的0
{
s[i] = '\0';
len--;
}
}
if(s[len-1] == '.')
s[len-1] = '\0';
}
int main()
{
while(scanf("%s%s",a,b)!=EOF)
{
change(a);
change(b);
/*
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
*/
if(strcmp(a,b))
printf("NO\n");
else
printf("YES\n");
}
return 0;
}