杭电2054(A == B ?)详解

来源:互联网 发布:杨贵妃 山口百惠 知乎 编辑:程序博客网 时间:2024/04/30 11:29

杭电2054

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 22 23 34 3
 

Sample Output
NOYESYESNO
思路:

       方法一:考虑有小数点时的判断,一般想到用字符串装这两个数字。先找出小数点的位置,比较两个小数点位置是否相同,不同即可判断出,相同进行下一步判断;相同时再比较小数点前的各位是否相等,不相等即可判断,相等进行下一步判断;比较小数点后面的各位是否相等,这里比较到长度短的最后一位即可,至于从短的最后一位到长的最后一位,只要判断长字符串这段区域是否都为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");}}}}






3 0
原创粉丝点击