刚还是还以为是简单的a==b,汗,重新审题如下:

1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int judge(char ch) 6 { 7 if(ch == '-') 8 return -1; 9 return 0; 10 } 11 int for_Locate(string a) 12 { 13 int i = 0; 14 if(a[0] == '-' || a[0] == '+') 15 i = 1; 16 for(; i < a.size() && a[i] == '0' ; ++i); 17 return i; 18 } 19 20 bool point(string a) 21 { 22 for(int i = a.size()-1; i >= 0; --i) 23 if(a[i] == '.') 24 return true; 25 return false; 26 } 27 int re_Locate(string a) 28 { 29 if(point(a)) 30 { 31 int i; 32 for(i = a.size()-1; i >= 0 && a[i] == '0'; --i); 33 if(a[i] == '.') 34 i = i-1; 35 return i; 36 } 37 return a.size()-1; 38 } 39 void f(string& a, int beg, int end) 40 { 41 if(beg == a.size()) 42 a = "0"; 43 else 44 { 45 string s(a.begin()+beg, a.begin()+end+1); 46 a = s; 47 } 48 } 49 50 51 int main() 52 { 53 string a, b; 54 while(cin >> a >> b) 55 { 56 int flag1 = 0, flag2 = 0; 57 flag1 = judge(a[0]); 58 flag2 = judge(b[0]); 59 int beg = for_Locate(a), end = re_Locate(a); 60 f(a, beg, end); 61 beg = for_Locate(b); 62 end = re_Locate(b); 63 f(b, beg, end); 64 string str("YES"); 65 66 if(flag1 != flag2) 67 { 68 if(a == b && a == "0") 69 str = "YES"; 70 else 71 str = "NO"; 72 } 73 else if(a != b) 74 str = "NO"; 75 //cout << "a:" << a << "><" << "b:" << b << endl; 76 cout << str << endl; 77 } 78 return 0; 79 } 80 81 82 /* 83 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 84 00000000000000000002222 2222 85 200 200000 86 0.00002 0.000020000000000000000000000000000000 87 00000000000000000000.00002 0.0000200000 88 0022000 000000000002200 89 -0022.00200 -000000000000022.002000000000000000000 90 0.00 0.000000000000000 91 000000000 0000000000000 92 000001.00000 1 93 -0001.000 0001 94 -0 0 95 96 */