输入 每个测试用例包含两个数字A和B. 这两个数字可能超过5000位
每种情况的输出,如果A等于B,则应打印“是”,或打印“否”。
示例输入
1 2
2 2
3 3
4 3
示例输出
NO
YES
YES
没有
我已经尝试了很多次,输出是正确的但是当我提交它时为什么它是错误的答案?
#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;
}
答案 0 :(得分:3)
为什么你不这么做:
#include<iostream>
int main() {
int a, b;
while (std::cin >> a >> b) {
std::cout << (a == b ? "YES" : "NO");
}
}
答案 1 :(得分:0)
编辑:如果您希望 0123等于123 或 0.0200004等于000.020000400000 等情况,请使用:
#include<iostream>
int main() {
float A, B;
while (std::cin >> A >> B)
{
if(A != B)
{
std::cout << "NO" << std::endl;
}
else
{
std::cout << "YES" << std::endl;
}
}
}
答案 2 :(得分:0)
“这两个数字可能超过5000位。”这是在C而不是C ++中,但大多数代码都是相同的。它从输入中删除前导和尾随内容,但不处理实际数字,只处理数字字符串。
#include <stdio.h>
#include <string.h>
char a [10000];
char b [10000];
char *strip (char *str)
// remove unnecessary leading and trailing chars from a number string
// return pointer to first significant char
{
int z;
// strip leading numeric zeros
while (*str=='0')
str++;
// strip trailing zeros after (and/or including) decimal point
if (strrchr (str, '.'))
for (z=strlen(str)-1; z>=0; z--) {
if (str[z] == '.') {
str[z] = 0; // truncate
break;
}
if (str[z] !='0') {
str[z+1] = 0; // truncate
break;
}
}
return str;
}
int main(void)
{
scanf ("%s%s", a, b);
if (strcmp (strip(a), strip(b)) == 0)
printf ("YES\n");
else printf ("NO\n");
return 0;
}