Я пишу программу, которая обрабатывает большие целые числа, хранящиеся в списках, и может выполнять сравнения и операции через перегрузки.У меня возникают проблемы с перегрузкой оператора вычитания, программа компилируется, но операция приводит к неверным результатам.
оператор-раздел:
BigInt BigInt::operator-(BigInt addend2) {
BigInt total;
short int first, second, result;
list<short int>::reverse_iterator
it1 = myList.rbegin(),
it2 = addend2.myList.rbegin();
while (it1 != myList.rend() || it2 != addend2.myList.rend()) {
if (it1 != myList.rend()) { first = *it1; }
else { first = 0; }
if (it2 != addend2.myList.rend()) { second = *it2; }
else { second = 0; }
if (first < second) {
first = first + 1000;
short int temp = first - second;
result = temp % 1000;
first = first - 1000;
}
else {
long int temp = first - second;
result = temp % 1000;
}
if (it1 != myList.rend()) {
it1++;
if (first < second) {
first = *it1;
first = first - 1;
*it1 = first;
}
}
if (it2 != addend2.myList.rend()) { it2++; }
total.myList.push_front(result);
}
return total;
}
Когда я запускаю вфайл теста, такой как ниже:
cout << "\nThe subtraction of\n\t"
<< number1 << " - " << number2
<< "\nis\n\t" << number1 - number2 << endl;
Я получаю вывод, такой как:
Enter a big integer:
50000
Enter another big integer:
20800
The sum of
50000
+ 20800
is
70800
The bigger number of
50000
and
20800
is
50000
The subtraction of
4-1000
- 20800
is
299999200
Add more integers (Y or N)?
Почему оператор вычитания выводит непредвиденный результат?