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

杭电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 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");
			}
		}
	}
}






  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值