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

来源:互联网 发布:理财软件下载 编辑:程序博客网 时间:2024/06/06 04:52

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 22 23 34 3
 Sample Output
NOYESYESNO
 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 2054156MS5512K2276 BJava    hdu2054import 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");  }} } 


 

 

 

 

原创粉丝点击