我正在做一個bigint項目,我很難理解爲什麼我的乘法運算符在測試用例上無法正常工作。Bigint *運營商
我排除.h文件,因爲它可能不必要。
bigint.cpp:
// Definition of multiplication operator
BigInt BigInt::operator*(BigInt addend2)
{
BigInt product;
short int first, // a block of 1st addend (this object)
second, // a block of 2nd addend (addend2)
result, // a block in their sum
carry = 0; // the carry in adding two blocks
list<short int>::reverse_iterator // to iterate right to left
it1 = myList.rbegin(), // through 1st list, and
it2 = addend2.myList.rbegin(); // through 2nd list
while (it1 != myList.rend() || it2 != addend2.myList.rend())
{
if (it1 != myList.rend())
{
first = *it1;
it1++ ;
}
else
first = 0;
if (it2 != addend2.myList.rend())
{
second = *it2;
it2++ ;
}
else
second = 0;
short int temp = first * second;
result = temp % 1000;
carry = temp/1000;
product.myList.push_front(result);
}
if (carry > 0)
product.myList.push_front(carry);
return product;
}
Main.cpp的(測試用例):
int main()
{
char response;
do
{
cout << "\nMultiplication part:" << endl;
cout << "The multiplication of\n\t"
<< number1 << " * " << number2
<< "\nis\n\t" << number1 * number2 << endl;
cout << "\nAdd more integers (Y or N)? ";
cin >> response;
}
當我運行代碼,乘法是錯誤的。
下面是一個示例運行: 123 * 423的乘法是-507,這顯然是不正確的。
我很確定我弄亂了乘法的定義,但任何人都可以說我弄亂了什麼地方?
編輯:只要讓每個人都知道,我的代碼可以編譯,但產品有時是錯誤的。 我也將我所有的短整型變爲長整型。
例如:
978 * 878 = 858684這是正確的
但是,當我用更大的數字則出現問題。
實施例:
432454 * 765534 = 330722436這是不正確的。正確答案是3.32 * 10^11
有一小部分我遺漏了測試用例 – Josh
嘗試使用longs或者更大的類型;取決於你希望得到多大,你可能想開始使用傅里葉方法或像intom-cook這樣的大整數乘法算法。 –
我試過改變短整型爲長整型,但這並沒有幫助 – Josh