0
我必须比较大数字,这些数字是1 < 2数字< 10^1000。运营商是:==,!=,>,<,> =,< =。我编写了一些代码,但它仍然在我的课程测试中显示一些错误(97次测试中出现8次错误)。我没有关于测试的细节。有人能告诉我哪里出错吗?比较大数字
#include <iostream>
#include <string>
using namespace std;
bool rowne(string a, string b)
{
if (a.length() == b.length())
{
for (int i = 0; i < a.length(); ++i)
{
if (a[i] != b[i])
{
return false;
}
}
return true;
}
else if (a.size() != b.size())
{
return false;
}
}
bool mniejsze(string a, string b)
{
if ((a.length() < b.length()))
{
return true;
}
else if (a.length() == b.length())
{
for (int z = 0; z < a.length(); ++z)
{
if (a[z] - '0' < b[z] - '0')
{
return true;
}
}
return false;
}
else if (a.length() > b.length())
return false;
}
int main()
{
string znak;
string a;
string b;
bool p = false;
cin >> a >> znak >> b;
while (a[0] == '0' && a.length() != 1)
{
a.erase(0, 1);
}
while (b[0] == '0' && b.length() != 1)
{
b.erase(0, 1);
}
if (znak == "==")
{
if (rowne(a, b) == true)
p = true;
}
else if (znak == "!=")
{
if (rowne(a, b) != true)
p = true;
}
else if (znak == "<")
{
if (mniejsze(a, b))
p = true;
}
else if (znak == ">")
{
if (mniejsze(b, a))
p = true;
}
else if (znak == "<=")
{
if (mniejsze(b, a) != true)
p = true;
}
else if (znak == ">=")
{
if (mniejsze(a, b) == false)
p = true;
}
if (p == true)
cout << "YES";
else if (p == false)
cout << "NO";
return 0;
}
因为这是课程作业,它非常有价值,你可以自己弄清楚这一点,但这里这是一个有用的提示。由于你的课程测试人员不会告诉你哪些案件失败了,哪些案件成功了,你应该让自己的案件找到失败的案例。如果您仍然没有发现任何问题,请尝试列出您正在制作的所有假设并重新检查它们。 – jwimberley
你的代码是否只适用于正数?否则,'-1 <1'给出“NO”。 – Shibli
该任务说1 maciek259