Правильно реализовать оператор вычитания с большими целыми числами - PullRequest
0 голосов
/ 04 апреля 2019

Я пишу программу, которая обрабатывает большие целые числа, хранящиеся в списках, и может выполнять сравнения и операции через перегрузки.У меня возникают проблемы с перегрузкой оператора вычитания, программа компилируется, но операция приводит к неверным результатам.

оператор-раздел:

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)?

Почему оператор вычитания выводит непредвиденный результат?

...