Итак, мне дали задание по использованию стеков. Задача этого задания состоит в том, чтобы создать программу, которая может складывать и вычитать очень большие целые числа (предположительно бесконечного размера) без использования каких-либо библиотек или импорта (например, без BigInteger).
Вот как я подошел к дополнению:
public Stack<Integer> sum(Stack<Integer> leadingStack, Stack<Integer> secondStack) {
int carry = 0;
Stack<Integer> resultStack = new Stack<Integer>();
while (leadingStack.isEmpty() == false && secondStack.isEmpty() == false) {
int result = 0;
int dig1 = leadingStack.pop();
int dig2 = secondStack.pop();
int resultDig = 0;
result = dig1 + dig2 + carry;
resultDig = result % 10;
carry = result / 10;
resultStack.push(resultDig);
}
if (carry > 0)
resultStack.push(carry);
return resultStack;
}
Этот метод работает с некоторыми целыми числами, но не работает с другими. Например, если я ввожу 500 и 450, я получаю 950, как и ожидалось. Однако, если я ввожу 500 и 45, я получаю 45.
И вот как я подошел к вычитанию (очень похожий подход):
public Stack<Integer> sub(Stack<Integer> leadingStack, Stack<Integer> secondStack) {
boolean borrow = false;
Stack<Integer> resultStack = new Stack<Integer>();
while (leadingStack.isEmpty() == false && secondStack.isEmpty() == false) {
int dig1 = leadingStack.pop();
int dig2 = secondStack.pop();
if (borrow = true) {
dig1 -= 1;
borrow = false;
}
if (dig1 - dig2 < 0) {
dig1 += 10;
resultStack.push(dig1 - dig2);
borrow = true;
}
}
return resultStack;
}
Здесь очень похожая проблема. Например, если я вычту 50 и 45, я получу 4. Если я вычту 50 000 и 45 000, я получу 4 900.
Я уверен, что мне здесь не хватает чего-то простого, но я снова и снова просматривал код, и я не уверен, что это такое.
java.util.Stack
? - person Andreas   schedule 03.03.2017x == true
это то же самое, что простоx
.x == false
совпадает с!x
. - person Code-Apprentice   schedule 03.03.2017if (borrow = true)
, или, возможно, вы имели в видуif (borrow == true)
, он жеif (borrow)
? - person Andreas   schedule 03.03.2017