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
方法一:考虑有小数点时的判断,一般想到用字符串装这两个数字。先找出小数点的位置,比较两个小数点位置是否相同,不同即可判断出,相同进行下一步判断;相同时再比较小数点前的各位是否相等,不相等即可判断,相等进行下一步判断;比较小数点后面的各位是否相等,这里比较到长度短的最后一位即可,至于从短的最后一位到长的最后一位,只要判断长字符串这段区域是否都为0即可。
方法二:要是用java内部方法来判断,就没有这么复杂了。类 BigDecimal:不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。 然后再用方法
compareTo
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。
-
方法一 代码实现:
import java.util.*;
class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
boolean isEqual;
String stra,strb,str;
int lena,lenb,point_a,point_b,i,minlen,maxlen;
while(sc.hasNext()){
isEqual=true;
stra=sc.next(); strb=sc.next();
lena=stra.length();lenb=strb.length();
point_a=point(stra,lena);point_b=point(strb,lenb);
//System.out.println(point_a+" "+point_b);
if(point_a!=point_b){//第一次判断:小数点位置是否一样
System.out.println("NO");//System.out.println("****");
continue;
}
for(i=0;i<point_a;i++){//第二次判断:小数点之前是否相等
if(stra.charAt(i)!=strb.charAt(i)){
isEqual=false;//System.out.println("*");
break;
}
}
if(lena>lenb){//让stra表示短的字符串,strb表示长的字符串
str=strb;strb=stra;stra=str;
}//System.out.println(stra+" "+strb);
minlen=lena<lenb?lena:lenb;
maxlen=lena<lenb?lenb:lena;
for(i=point_a;i<minlen;i++){//第三次判断:小数点之后到短的最后一位是否相等
if(stra.charAt(i)!=strb.charAt(i)){
isEqual=false;//System.out.println("**");
break;
}
}
for(i=minlen;i<maxlen;i++){//第四次判断:短字符串的最后一位到长字符串最后一位是相等
if(strb.charAt(i)!='0'&&strb.charAt(i)!='.'){
isEqual=false;//System.out.println(i+"***");
break;
}
}
if(isEqual){
System.out.println("YES");
}else{
System.out.println("NO");
}
}
}
public static int point(String a,int n){//计算小数点的位置
int i,x=0;
for(i=0;i<n;i++){
if(a.charAt(i)=='.'){
x=i;break;
}
}
if(x==0){//若没有小数点,就把字符串最后作为小数点的位置
return n;
}
return x;
}
}
方法二 代码实现:
import java.util.*;
import java.math.BigDecimal;
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("NO");
}else{
System.out.println("YES");
}
}
}
}