您的位置:首页 > 其它

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

2013-08-29 11:26 288 查看
HDU2054

A == B ?

[b]Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 50394    Accepted Submission(s): 7791
[/b]

[align=left]Problem Description[/align]
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
 
[align=left]Input[/align]
each test case contains two numbers A and B.

  
[align=left]Output[/align]
for each case, if A is equal to B, you should print "YES", or print "NO".
 
[align=left]Sample Input[/align]
 

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


 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: