輸入 每個測試用例包含兩個數A和B. 這兩個數可以大於5000個比特這兩個代碼是相似的,爲什麼第一個是錯的?
輸出對於每個情況下,如果A等於B,你應該打印「YES」,或打印「沒有」。
採樣輸入
樣本輸出
NO
YES
YES
NO
我已經嘗試了很多次,輸出是正確的,但是爲什麼當我提交時它是錯誤的答案?
#include<iostream>
#include<string>
using namespace std;
string cut(string X)
{
long i;
if(X.find(".")!=X.npos)
{
i=X.length();
while((X[--i]=='0'||X[i]=='.')&&i >0) X.erase(i,1);
}
while((X[0]=='0')&&X.length()>1) X.erase(0,1);
if(X==".") X="0";
return X;
}
int main()
{
string A,B;
while(cin>>A>>B)
{
if(cut(A)==cut(B)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
爲什麼上面的代碼不正確,而下面的代碼是正確的?
#include <iostream>
#include <string>
using namespace std;
string a, b;
char t;
long i;
int
main (void) {
while (cin >> a >> b) {
if (a.find(".") != a.npos) {
i = a.length();
while ((a[--i] == '0' || a[i] == '.') && i > 0) {
t = a[i];
a.erase(i, 1);
if (t == '.') break;
}
}
if (b.find(".") != b.npos) {
i = b.length();
while ((b[--i] == '0' || b[i] == '.') && i > 0) {
t = b[i];
b.erase(i, 1);
if (t == '.') break;
}
}
while ((a[0] == '0') && a.length() > 1) {a.erase(0, 1);}
while ((b[0] == '0') && b.length() > 1) {b.erase(0, 1);}
if (a == ".") a = "0";
if (b == ".") b = "0";
if (a == b) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
'cut()'做了什麼?爲什麼在沒有人的時候在輸入中尋找'.'? – Galik 2014-10-29 11:50:04
因爲沒有'iostream'頭文件? – 2014-10-29 11:51:15
,因爲它需要我們考慮這些情況:0.000010000和0.00001.或0000.0000和0。或者,如果我只是做最簡單的比較 – Jacqueline 2014-10-29 11:52:14