为了账号安全,请及时绑定邮箱和手机立即绑定

使用堆栈加法?

使用堆栈加法?

慕尼黑的夜晚无繁华 2022-06-23 19:22:31
我想添加一对用空格分隔的数字。因此,用户输入多个以空格分隔的任意长度的数字。我为此使用 BigInteger。使用两个堆栈,每对数字必须加在一起,并且需要打印结果。例如,输出将是这样的:10 + 10 = 2099 + 1 = 1001000000000000000000000000000000 + 1000000000000000000000000000000 = 2000000000000000000000000000000我需要使用堆栈来做到这一点。这是我到目前为止所拥有的,但我不知道接下来该去哪里。public static void main (String[] args){    Stack<BigInteger> stack = new Stack<BigInteger>();    System.out.println("Please write some pairs of numbers to add separated by a space: ");    Scanner input = new Scanner(System.in);    for (BigInteger number : input.nextLine().split(" "))    {        for (int i = 0; i < number.length(); i++)         {            stack.push(number);        }        while (!stack.isEmpty()) {            reverseInput += stack.pop();        }    }  }
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

你不需要内for循环。如果您尝试使用堆栈添加两个数字,您可以将它们压入堆栈,弹出并添加到结果中,例如:


Stack<BigInteger> stack = new Stack<BigInteger>();

System.out.println("Please write some pairs of numbers to add by a space: ");


Scanner input = new Scanner(System.in);


for (BigInteger number : input.nextLine().split(" "))

{


BigInteger result = new BigInteger("0");

while (!stack.isEmpty()) {

    result.add(stack.pop());

}

System.put.println("Result : " + result);


查看完整回答
反对 回复 2022-06-23
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

首先,

for (BigInteger number : input.nextLine().split(" "))

行不通,因为它.split()返回一个 type 的对象String[],你不能直接把Stringas 当作BigInteger.

此外,您正在加倍使用 for 循环。我在上面复制的那一行,如果它按照你想要的方式工作,它将遍历你输入中的所有数字。所以不需要那个内部 for 循环。事实上,它甚至不会编译,因为BigInteger没有.length()方法。

但你在正确的轨道上。您可以做的是像您已经在做的那样标记输入,并将每个元素按原样推入堆栈。因为没有必要将它们作为BigInteger. 您可以有一个Stack<String>, 然后BigInteger在您将它们弹出以进行添加时将它们转换为。或者,将它们转换为BigInteger当您将每个推入堆栈时。


查看完整回答
反对 回复 2022-06-23
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

input.nextLine().split(" ");

返回 a String[],您不能自动将其转换为BigInteger[],因为这会抛出 a ClassCastException。


你允许十进制值吗?如果是这样,您最好将每个String元素转换为原始double表示,因为您不需要BigDecimal.


由于不允许使用十进制值,因此您需要将其转换String为它的integer表示形式。


for (final String s : input.nextLine().split(" ")) {

   final int value = Integer.parseInt(s);

   stack.push(value);

}

堆栈泛型类型将是Integer. 所以Stack<Integer>


您是否考虑过用户输入错误的情况?在这种情况下,您需要处理NumberFormatException


查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信