HDU 2054 A==B?,NYOJ-524-A-B(很有意思)
阿新 • • 發佈:2019-02-10
A == B ?
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 50394 Accepted Submission(s): 7791
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
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");
}
}
}