【发布时间】:2021-12-20 13:18:19
【问题描述】:
最小的可重现示例:
int borrow = 0;
int valueOne = 2;
int valueTwo = 5;
int sub;
if(valueOne > valueTwo) {
sub = borrow + valueOne - valueTwo;
} else {
sub = borrow + valueTwo - valueOne;
}
if (sub < 0) {
borrow = -1;
sub += 10;
} else {
borrow = 0;
}
System.out.format("borrow: %d; sub: %d.%n", borrow, sub);
预期输出:
借用:-1;子:7。
观察到的输出:
借:0;子:3。
我有两个不使用集合的链表堆栈实现。此方法应该处理任何长度的数字并减去它们。该方法在过程中没有任何借用时有效,但在减法需要借用时无效。当减法需要借用时,我无法弄清楚逻辑!任何帮助
方法如下
public static void subtractRoutine(String operndOne, String operndTwo) {
int sub =0, borrow =0, valueOne, valueTwo;
pushToLsLeft(padZero(operndOne, operndTwo)[ZERO]);
pushToLsRight(padZero(operndOne, operndTwo)[ONE]);
// System.out.println(left);
left.reverseLinkLsStack();
right.reverseLinkLsStack();
while(left.sizeLinkedLs() > ZERO && right.sizeLinkedLs() > ZERO) {
valueOne = Character.getNumericValue(left.pop());
valueTwo = Character.getNumericValue(right.pop());
// --------------------------- please, only focus on the logic below. Everything above works fine.
if(valueOne > valueTwo) {
sub = borrow + valueOne - valueTwo;
} else {
sub = borrow + valueTwo - valueOne;
// System.out.println(sub);
}
if (sub < 0) {
borrow = -1;
sub += 10;
} else {
borrow = 0;
}
// System.out.println(sub);
result.push(sub);
}
}
如果我输入这个
250 + -150
-250 + 150
120 + -50
输出将是
250
-150
0100
-250
150
-0100
// the problem is here
120
-50
0130
【问题讨论】:
-
很难说。你能create a minimal reproducible example 让我们尝试运行你的代码吗?这将有助于找出问题所在。
-
@OleV.V.抱歉,由于为此使用了多种方法,因此可能很难创建最小的复制。我了解其重要性,但感谢您的帮助。
标签: java linked-list stack