HDU 2054 A==B?,NYOJ-524-A-B(很有意思)

HDU2054

A == B ?

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 50394    Accepted Submission(s): 7791


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

 校庆杯Warm Up

 Recommend

linle

 

/*
测试数据
0 -0
0 +0
123.123 +00123.12300
100.00 100
.1 0.1
000.000 0
123456789123456789 123456789123456789
1 1
000001000. 1000
+0 -000.000
.0 0
.0 0.
结果全是YES

这些测试数据如果过了基本差不多可以AC了
这都是WA出来的。。。。

*/

NYOJ-524 与其相同,但是nyoj测试数据更严密


 

//A-B Problem  Accepted   29     246MS    java   08-29 11:00:42     nyoj524
//A == B ?     Accepted	 2054	156MS	5512K	2276 B	Java	    hdu2054
import java.util.Scanner;
public class A_subtract_BProblem {//A == B ?
	static int i,j,k,f,t;
	private static String AB(String s) {
		boolean  flag=false,fflag=false;
		String sss=null;
		   
		  int a=0,t=-1,k=-1;
		    if(s.charAt(0)=='+' || s.charAt(0)=='-'){
		    	a=1;
		    	s=s.substring(a);//去掉符号位
		    }
 	 
		    if(s.charAt(0)=='.') //第一个就为点的,+"0“   +.00  .999  -.0
		    	s="0"+s;
		    
		    if(s.length()==1){ //0000.9 +.9   0.9 9.0
		    		s=s+".";//长度为1的数,0  1  +0 +1
		    	}
		    int len = s.length();
			   for(i=0; i<len; i++){
				   char b=s.charAt(i);
				   if( i!=len-1 && b=='0')//防止000  000.被漏掉
					   continue;
				      
					   if((i==len-1)&&(s.charAt(i)=='.' || s.charAt(i)=='0')){//0000  0000. 000.000
						    t=len-2;
						    flag=true;//标记这样结果为0的数,直接给出k值(小数部分不再重复计算)
						    break;
					   }
					   if(b=='.'){//000.123  0.123 .123
						   t=i-1;
						   break;
					   }						   
						t=i;// 找到不为0,不为点的数      000123 00123.
						break;			   
			   }//整数部分	   
			//   System.out.println(s+" t "+t);
			   for(i=len-1; i>=0; i--){//找点   避免
				   if(s.charAt(i)=='.'){
					   fflag=true;
					   break;
				   }   
			   }
				  if(fflag){//看是否有小数点,有的话计算,没有,跳过
					  for(i=len-1; i>=0; i--){//小数部分
						   if( s.charAt(i)=='0')//去掉后面的0,前提有小数点
		                       continue; 
						    // System.out.println("i+ "+i);
							   if(s.charAt(i)=='.')
								   k=i;
							   else
								   k=i+1;//小数点最后面起不为0数
							   break;     
					   }  
				  }
				  else
					  k=len;				
				  if(flag)
					  k=len-1;
				// System.out.println("k "+k+" "+fflag);//测试
				  sss =s.substring(t, k);
				//  System.out.println(s+"=="+sss);
				return sss;	   
	}
	public static void main(String[] args) {
		  
		  Scanner sc = new Scanner(System.in); 
		   while(sc.hasNext()){
		
			   String  s1 = sc.next();
			   String  s2 = sc.next();
			   char a1 = s1.charAt(0);
			   char a2 = s2.charAt(0);
			   String ss1=AB(s1);
			   String ss2=AB(s2);
			   if( (a1!='-' && a2=='-') || (a2!='-' && a1=='-') ){
 					 if(ss1.equals("0") && ss2.equals("0"))
						 System.out.println("YES");//-0.00  0  +0  -0.  .0  000 
					 else
				         System.out.println("NO");
			   }		      
			   else {				   
						 if(ss1.equals(ss2))
							 System.out.println("YES");
						 else
							 System.out.println("NO"); 
			   } 
			   
		   }
	}
}        



用java的大数做就更简单了:

import java.math.BigDecimal;
import java.util.Scanner;
public class Main 
{		public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		while(input.hasNext()){
			String a=input.next();
			String b=input.next();
			a=dei(a);
			b=dei(b);
			BigDecimal a1=new BigDecimal(a);
			BigDecimal b1=new BigDecimal(b);
			System.out.println(a1.equals(b1)? "YES":"NO");
		}
	}
	private static String dei(String a) {
		int e=-1;
		for(int i=1;i<a.length();i++){
			if(a.charAt(i)=='.'){
				e=i;
				break;
			}
		}
		while(e!=-1&&a.endsWith("0")){
			a=a.substring(0, a.length()-1);
		}
		return a;
	}
}        


 

 再简单点:

import java.util.*;
import java.math.BigDecimal;
public class Main{
public static void main (String[] args)throws Exception{
	
Scanner in=new Scanner(System.in);
BigDecimal a,b;
  while(in.hasNext()){
     a=in.nextBigDecimal(); 
 
     b=in.nextBigDecimal(); 
  
     if(a.compareTo(b)==0) 
         
    	 System.out.println("YES");
  
     else   
        System.out.println("NO");
  }
} 
} 


 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值