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;
}
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。如果我减去五万和四万五千,我得到四千九百。
我确信我在这里遗漏了一些简单的东西,但是我反复查看了代码,我不确定它是什么。
您的代码中需要注意的地方很少:
if(borrow=true)
全部在代码中:
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 dig1 = leadingStack.pop();
int dig2 = secondStack.pop();
int result = dig1 + dig2 + carry;
int resultDig = result % 10;
carry = result / 10;
resultStack.push(resultDig);
}
Stack<Integer> leftStack = leadingStack.isEmpty() ? secondStack : leadingStack;
while (leftStack.isEmpty() == false) {
int dig = leftStack.pop();
if (carry > 0) {
dig += carry;
carry = 0;
}
resultStack.push(dig);
}
if (carry > 0) resultStack.push(carry);
return reverse(resultStack);
}
public Stack<Integer> sub(Stack<Integer> leadingStack, Stack<Integer> secondStack) {
boolean borrow = false;
Stack<Integer> resultStack = new Stack<Integer>();
if (leadingStack.size() < secondStack.size()) {
// Handle negative number
}
while (leadingStack.isEmpty() == false && secondStack.isEmpty() == false) {
int dig1 = leadingStack.pop();
int dig2 = secondStack.pop();
if (borrow) {
dig1 -= 1;
borrow = false;
}
if (dig1 < dig2) {
dig1 += 10;
resultStack.push(dig1 - dig2);
borrow = true;
}
else {
resultStack.push(dig1 - dig2);
}
}
Stack<Integer> leftStack = leadingStack.isEmpty() ? secondStack : leadingStack;
while (leftStack.isEmpty() == false) {
int dig = leftStack.pop();
if (borrow) {
dig -= 1;
borrow = false;
}
resultStack.push(dig);
}
if (borrow) {
// Handle negative number
}
return reverse(resultStack);
}
private Stack<Integer> reverse(Stack<Integer> inStack) {
Stack<Integer> outStack = new Stack<>();
while (inStack.isEmpty() == false) outStack.push(inStack.pop());
return outStack;
}
3. 整数的加减运算 我们已经了解了计算机中正整数如何表示,加法如何计算,那么负数如何表示,减法又如何计算呢?本节讨论这些问题。为了书写方便,本节举的例子都用8个bit表示一个数,实际计算机做整数加减运算的操作数可以是8位、16位、32位甚至64位的。 3.1. Sign and Magnitude表示法 要用8个bit表示正数和负数,一种简单的想法是把最高位规定为符号位(Sign Bit),0表
题目描述 输入2个大正整数(长度可能达到1000位),求两者之和。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据输入两个正整数A和B。 输出格式: 对于每组测试,在一行上输出A+B的结果。 输入样例: 2222222222 44444444444 输出样例: 46666666666 解题代码 #include<iostream> #include<string> using namesp
我不关心可综合性,我只想弄清楚如何处理带符号值的一元算术上的溢出。 如果有人能给我指明正确的方向,我会非常伟大,谢谢!
问题内容: 我想通过对Sequelize进行简单添加来进行更新。 表: 样品: 此查询后 我知道这是一个简单的问题,但我找不到解决方案。 我可以加减哪个运算符?谢谢 问题答案: 这里是 : 要么 您也可以只替换为。 有关更多详细信息:请 阅读
我正在用C语言开发ASCII游戏。玩家绕着障碍物('X')移动。玩家拥有生命值并在遇到障碍时失去生命值。我将健康声明为int,并设置为100: 然后我做了一个检测碰撞的开关盒。然后我输入: 然后运行程序。我遇到了一个障碍,它降低了健康度,但增加了一个额外的数字(例如,不是说99,而是说999)。我试着调试,但什么也没找到。我做错了什么?以下是完整的代码:
我有一个在 上运行的 Java 应用程序。我观察到系统报告的Java进程的RSS使用率不断增加,它将达到超过90%的物理内存,即,我的代码将重新启动系统。另一方面,我从代码中定期打印出来的表明它总是在不超过物理内存37%的有限范围内波动(意味着 你知道发生了什么以及如何解决这个问题吗? 该系统是 板上的嵌入式 Linux。