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