我必须比较大数字,这些数字是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;
}
答案 0 :(得分:0)
您的代码看起来很适合&#34;快乐路径&#34;执行,即两个输入都是格式良好的,比较运算符(znak
?)是预定义的一个。然而,人们可以(并且你必须)提出一系列负面测试,旨在打破&#34;打破&#34;你的代码。这里列出了一些用于测试的想法:
您的代码中会出现一个非数字字符的错误:此行:
if (a[z] - '0' < b[z] - '0')
对于'0'
以下的ASCII字符,将完全中断,例如'$'
(因为这会产生负数,或者在减去'0'
后产生整数溢出 - 全部取决于是否为char
被定义为您的构建已签名或未签名)